Public function connect php

Магические методы

Имена методов __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() и __debugInfo() зарезервированы для «магических» методов в PHP. Не стоит называть свои методы этими именами, если вы не хотите использовать их «магическую» функциональность.

PHP оставляет за собой право все методы, начинающиеся с __, считать «магическими». Не рекомендуется использовать имена методов с __ в PHP, если вы не желаете использовать соответствующий «магический» функционал.

__sleep() и __wakeup()

Функция serialize() проверяет, присутствует ли в вашем классе метод с «магическим» именем __sleep(). Если это так, то этот метод выполняется прежде любой операции сериализации. Он может очистить объект и предполагается, что будет возвращен массив с именами всех переменных объекта, который должен быть сериализован. Если метод ничего не возвращает кроме NULL , то это значит, что объект сериализован и выдается предупреждение E_NOTICE .

Замечание:

Недопустимо возвращать в __sleep() имена приватных свойств объекта в родительский класс. Это приведет к предупреждению E_NOTICE . Вместо этого вы можете использовать интерфейс Serializable.

Рекомендованное использование __sleep() состоит в завершении работы над данными, ждущими обработки или других подобных задач очистки. Кроме того, этот метод можно выполнять в тех случаях, когда нет необходимости сохранять полностью очень большие объекты.

С другой стороны, функция unserialize() проверяет наличие метода с «магическим» именем __wakeup(). Если такой имеется, то он может воссоздать все ресурсы объекта, принадлежавшие ему.

Обычно __wakeup() используется для восстановления любых соединений с базой данных, которые могли быть потеряны во время операции сериализации и выполнения других операций повторной инициализации.

Пример #1 Sleep и wakeup

Читайте также:  font

class Connection
protected $link ;
private $dsn , $username , $password ;

public function __construct ( $dsn , $username , $password )
$this -> dsn = $dsn ;
$this -> username = $username ;
$this -> password = $password ;
$this -> connect ();
>

private function connect ()
$this -> link = new PDO ( $this -> dsn , $this -> username , $this -> password );
>

public function __sleep ()
return array( ‘dsn’ , ‘username’ , ‘password’ );
>

public function __wakeup ()
$this -> connect ();
>
> ?>

__toString()

Метод __toString() позволяет классу решать самостоятельно, как он должен реагировать при преобразовании в строку. Например, что напечатает echo $obj;. Этот метод должен возвращать строку, иначе выдастся неисправимая ошибка E_RECOVERABLE_ERROR .

Нельзя бросить исключение из метода __toString(). Попытка это сделать закончится фатальной ошибкой.

Пример #2 Простой пример

// Объявление простого класса
class TestClass
public $foo ;

public function __construct ( $foo )
$this -> foo = $foo ;
>

public function __toString ()
return $this -> foo ;
>
>

$class = new TestClass ( ‘Привет’ );
echo $class ;
?>

Результат выполнения данного примера:

Ранее, до PHP 5.2.0, метод __toString() вызывался только непосредственно в сочетании с функциями echo или print . Начиная с PHP 5.2.0, он вызывается в любом строчном контексте (например, в printf() с модификатором %s), но не в контекстах других типов (например, с %d модификатором). Начиная с PHP 5.2.0, преобразование объекта в строку при отсутствии метода __toString() вызывает ошибку E_RECOVERABLE_ERROR .

__invoke()

Метод __invoke() вызывается, когда скрипт пытается выполнить объект как функцию.

Замечание:

Данный метод доступен начиная с PHP 5.3.0.

Пример #3 Использование __invoke()

class CallableClass
public function __invoke ( $x )
var_dump ( $x );
>
>
$obj = new CallableClass ;
$obj ( 5 );
var_dump ( is_callable ( $obj ));
?>

Читайте также:  Php imagecreatefromjpeg jpeg library reports unrecoverable error

Результат выполнения данного примера:

__set_state()

Этот статический метод вызывается для тех классов, которые экспортируются функцией var_export() начиная с PHP 5.1.0.

Параметр этого метода должен содержать массив, состоящий из экспортируемых свойств в виде array(‘property’ => value, . ).

Пример #4 Использование __set_state() (начиная с PHP 5.1.0)

class A
public $var1 ;
public $var2 ;

public static function __set_state ( $an_array ) // С PHP 5.1.0
$obj = new A ;
$obj -> var1 = $an_array [ ‘var1’ ];
$obj -> var2 = $an_array [ ‘var2’ ];
return $obj ;
>
>

$a = new A ;
$a -> var1 = 5 ;
$a -> var2 = ‘foo’ ;

eval( ‘$b = ‘ . var_export ( $a , true ) . ‘;’ ); // $b = A::__set_state(array(
// ‘var1’ => 5,
// ‘var2’ => ‘foo’,
// ));
var_dump ( $b );

Результат выполнения данного примера:

object(A)#2 (2) < ["var1"]=>int(5) ["var2"]=> string(3) "foo" >

__debugInfo()

Этот метод вызывается функцией var_dump() , когда необходимо вывести список свойств объекта. Если этот метод не определен, тогда будут выведены все public, protected и private свойства объекта.

Этот метод был добавлен в PHP 5.6.0.

Пример #5 Использование __debugInfo()

public function __construct ( $val ) $this -> prop = $val ;
>

public function __debugInfo () return [
‘propSquared’ => $this -> prop ** 2 ,
];
>
>

Результат выполнения данного примера:

Источник

Оцените статью