Я пытаюсь схватиться с волшебными методами PHP, и для этого я создаю тестовый класс, который выглядит следующим образом:Создание и использование магических методов в PHP
<?php
class overload
{
protected $lastCalledParam;
public $param;
public function __construct()
{
return $this->switchConstruct(func_get_args());
}
protected function switchConstruct(array $args)
{
switch (count($args))
{
case 0:
return print "0 params<br />";
case 1:
return call_user_func_array(array($this, 'constr1'), $args);
case 2:
return call_user_func_array(array($this, 'constr2'), $args);
}
die("Invalid number of args");
}
protected function constr1($a)
{
print "constr1 called<br />";
}
protected function constr2($a, $b)
{
print "constr2 called<br />";
}
public function __get($name)
{
$this->lastCalledParam = $name;
return $this->{$name};
}
public function __set($name, $value)
{
$this->lastCalledParam = $name;
$this->{$name} = $value;
}
protected function lastCalled()
{
if (func_num_args() == 1)
{
$args = func_get_args();
$this->lastCalledParam = $args[0];
}
return $this->lastCalledParam;
}
public function __toString()
{
return $this->lastCalledParam == null ? "No data found" : $this->lastCalledParam;
}
}
И называется так:
<?php
require_once 'clib/overload.php';
$c = new overload();
print $c->__toString();
print "<br />";
$c->param = "Hello";
print $c->__toString();
?>
поведение, которое я ожидал, что на первом __toString()
вызова будет:
0 PARAMS
Нет данных
Здравствуйте
Но то, что я получаю:
0 PARAMS
Нет данных
Нет данных
я пришел к основным придерживаясь точки с этим и не может понять, почему он не делает работу по установке lastCalledParam
собственности!
Я получаю общее количество 0 ошибок и 0 предупреждений с полным сообщением об ошибках и предупреждениях, поэтому я не понимаю, что не называется, где/почему.
Этот пример можно использовать ад много похудение вниз. Половину этого кода не нужно читать, чтобы понять проблему. – deceze
Метод '__set' также перезаписывает значение' lastCalledParam' с конструкцией массива. – MatsLindh