[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Я VS Классы. Попытка №2
Игорь_Vasinsky
Первая моя встреча с классам закончилась моим полным поражением, теперь:

<?php
class
Register
{
public $user;
public $date;


public function __construct()
{
$user = !empty($_POST['user']) ? $_POST['user'] : null;
$this->user = $user;
}

public function safeData()
{
if(!isset($this->user))
return $result = "Данные не поступили!";
else
{
$this->user = htmlspecialchars(addslashes($this->user));
return $this->user;
}

}

}


?>


$obj = new Register();
$obj->safeData();


Я почему-то реши, что public $user даст мне возможность использовать переменную во всё классе, но видимо ошибся пытаясь использовать её внутри метода safeData()

Догда я предположил - метод это функция, значит просто нужно передать в качестве аргумента

safeData($user)
safeData($this->user)


Но это значит, что при создании объекта и вызове метода safeData() - я тоже должен указать атрибут, но $user - это данные из $_POST - данные из формы.

Так же делал static $user, и работал - self::user ...

Вот вообщем и загвоздка.

И еще читал про __construct(), на ирбисе видел примеры без него - так и не понял в чём его приимущество?



Спустя 13 минут, 43 секунды (24.09.2011 - 10:13) kirik написал(а):
Цитата (Игорь_Vasinsky @ 24.09.2011 - 02:59)
так и не понял в чём его приимущество?

У него нет никакого приемущества.. он просто вызывается при создании нового объекта.

Цитата (Игорь_Vasinsky @ 24.09.2011 - 02:59)
Я почему-то реши, что public $user даст мне возможность использовать переменную во всё классе, но видимо ошибся пытаясь использовать её внутри метода safeData()

Почему ошибся? Это свойство должно быть доступно как внутри класса ($this->user), так и за его пределами ($MyObj->user).

Цитата (Игорь_Vasinsky @ 24.09.2011 - 02:59)
Вот вообщем и загвоздка.

В чём, собственно, загвоздка?

Спустя 7 минут, 40 секунд (24.09.2011 - 10:21) caballero написал(а):
Цитата
поЯ почему-то реши, что public $user даст мне возможность использовать переменную во всё классе


даже private $user даст такую возможность

Цитата
Догда я предположил - метод это функция


А не проще вместо строить предположения просто взять учебник или документацию и изучить на примерах что там чем является

Спустя 4 минуты, 4 секунды (24.09.2011 - 10:25) Игорь_Vasinsky написал(а):
    public function safeData()
{
if(!isset($this->user))
return $result = "Данные не поступили!";
else
{
$this->user = htmlspecialchars(addslashes($this->user));
return $this->user;
}

}


отправляю из формы данные, в __construct() - они видны, а вот в safeDate() нет, метод возращает - Данные не поступили!

caballero
Вот тока не надо строить разгавор в такой интонации, я здесь не первый день и не надо меня путать с чудаком, зашедшим сюда второй раз и с вопросом "Напишите мне онлайн игру".

Я задал вопрос, ответ на который не знаю как сформулировать, соответственно и google мне не поможет, а просматривая примеры - просто не нашёл подходящей ситуации.

Спустя 3 минуты, 1 секунда (24.09.2011 - 10:28) Invis1ble написал(а):
Цитата
В чём, собственно, загвоздка?

да-да, в чем?
код рабочий
$_POST['user'] = 'Василий Пупкин';

$register = new Register();
echo $register->safeData();

Спустя 10 минут, 11 секунд (24.09.2011 - 10:38) Игорь_Vasinsky написал(а):
мистика........... вчера не работало, сёдня заработало ohmy.gif

вчера просто запостить не успел.

Вообщем ссори за суету.


Спустя 6 часов, 5 минут, 46 секунд (24.09.2011 - 16:44) inpost написал(а):
Игорь_Vasinsky
return $result = "Данные не поступили!";
Зачем тут $result ? Можно так: return "Данные не поступили!";

Спустя 18 минут, 7 секунд (24.09.2011 - 17:02) Игорь_Vasinsky написал(а):
Учту. спасиб. Тепер другое

  class DBConnection
{
public $host = "localhost";
public $user = "root";
public $password = "";
public $db = "names";
protected $link;
protected $selectDB;

public function __construct()
{
$this->host = $host;
$this->user = $user;
$this->password = $password;
$this->db = $db;
$this->link = $link;
$this->selectDB = $selectDB;
}

public function connect()
{
$this->link = mysql_connect($this->host, $this->user, $this->password);

if(!$this->link)
return mysql_error();

$this->selectDB = mysql_select_db($this->db);

if(!$this->selectDB)
return mysql_error();

}

}


$obj = new DBConnection;
$obj->connect();



1. теперь тупо говорить что не одна из переменных, объявленных вначале класса не опознана :D

2. Я правильно сориентировался:

    // Эти я хотел заполнять при инициализации объекта.
public $host = "localhost";
public $user = "root";
public $password = "";
public $db = "names";
//Их я собираю потом использовать в другом классе через extented
protected $link;
protected $selectDB;



Спустя 4 минуты, 38 секунд (24.09.2011 - 17:06) Winston написал(а):
Да нет, так вообще не катит, переписать хотя бы так
Свернутый текст

class DBConnection
{
private $host;
private $user;
private $password;
private $db;
protected $link;
protected $selectDB;

public function __construct($host, $user, $password, $db)
{
$this->host = $host;
$this->user = $user;
$this->password = $password;
$this->db = $db;
}

public function connect()
{
$this->link = mysql_connect($this->host, $this->user, $this->password);

if(!$this->link)
return mysql_error();

$this->selectDB = mysql_select_db($this->db);

if(!$this->selectDB)
return mysql_error();

}
}


$host = "localhost";
$user = "root";
$password = "";
$db = "names";

$DB = new DBConnection($host, $user, $password, $db);

Спустя 6 минут, 44 секунды (24.09.2011 - 17:13) Игорь_Vasinsky написал(а):
спасиб. wink.gif

Спустя 46 минут, 12 секунд (24.09.2011 - 17:59) Игорь_Vasinsky написал(а):
biggrin.gif biggrin.gif biggrin.gif

чем дальше, тем больше я убеждаюсь, что оно мне нафиг не надо.

Спустя 8 часов, 36 минут, 5 секунд (25.09.2011 - 02:35) kirik написал(а):
Цитата (Игорь_Vasinsky @ 24.09.2011 - 10:59)
чем дальше, тем больше я убеждаюсь, что оно мне нафиг не надо.

это нормально.. это пройдёт wink.gif

Спустя 11 минут, 12 секунд (25.09.2011 - 02:47) vital написал(а):
А теперь вот в класс выше делаем синглтоном, переделываем на пдо.. И получаем что-то такое
<?php

class
DB {

//simple singleton for db connection
private static $dbconfig = array();
protected static $instance = null;
private $dblink = null;

/**
*
@return DB
*/

public static function getInstance()
{
if (is_null(self::$instance))
{
self::$instance = new DB();
}
return self::$instance;
}

private function __construct()
{
self::$dbconfig = CONFIG::getInstanse()->getGroupConfig('db');
try
{
$this->dblink = new PDO('mysql:host=' . self::$dbconfig['host'] . ';dbname=' . self::$dbconfig['dbname'], self::$dbconfig['user'], self::$dbconfig['pass']);
$this->dblink->exec('SET NAMES \'utf8\'');
} catch (PDOException $e)
{
echo 'Connection failed: ' . $e->getMessage();
exit;
}
}

/**
*
@return PDO
*/

public function getPdoInstanse()
{
return $this->dblink;
}

/**
*
*
@param string $sql
*
@return PDOStatement
*/

public function query($sql)
{
try
{
return $this->dblink->query($sql);
} catch (PDOException $e)
{
echo 'Query failed: ' . $e->getMessage();
exit;
}
}


public function exec($sql)
{
try
{
return $this->dblink->exec($sql);
} catch (PDOException $e)
{
echo 'Exec failed: ' . $e->getMessage();
exit;
}
}


/**
*
@return PDOStatement
*/

public function prepare($sql)
{
return $this->dblink->prepare($sql);
}

private function __clone()
{ /* nonono david blaine,nonono! */
}

private function __wakeup()
{ /* same */
}

}


?>

Спустя 1 минута, 29 секунд (25.09.2011 - 02:48) vital написал(а):
Для простого фриланса может и не надо. Но любое более-менее серъезное приложение без этого не написать. Без обид.

Спустя 1 час, 11 минут, 58 секунд (25.09.2011 - 04:00) Игорь_Vasinsky написал(а):
Да уж видишь, у меня второй заход.

Не нашёл я подробнинькие примеры пока.


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.