повторное объявление экземпляра и статической функции
class me {
private $name;
public function __construct($name) { $this->name = $name; }
public function work() {
return "You are working as ". $this->name;
}
public static function work() {
return "You are working anonymously";
}
}
$new = new me();
me::work();
Фатальная ошибка: Не удается повторно объявить меня::work()
Вопрос в том, почему php не допускает такого повторного объявления. Есть ли какой-нибудь обходной путь?
3
Author: Rizky Ramadhan, 2011-05-03
2 answers
Есть на самом деле обходной путь для этого с использованием создания волшебного метода, хотя я, скорее всего, никогда бы никогда не сделал бы что-то подобное в производственном коде:
__call
запускается внутренне, когда недоступный метод вызывается в области объекта.
__callStatic
запускается внутренне, когда недоступный метод вызывается в статической области.
<?php
class Test
{
public function __call($name, $args)
{
echo 'called '.$name.' in object context\n';
}
public static function __callStatic($name, $args)
{
echo 'called '.$name.' in static context\n';
}
}
$o = new Test;
$o->doThis('object');
Test::doThis('static');
?>
7
Author: Demian Brecht, 2011-05-03 01:35:41
Вот как, я думаю, вы должны сделать это вместо этого:
class me {
private $name;
public function __construct($name = null) {
$this->name = $name;
}
public function work() {
if ($this->name === null) {
return "You are working anonymously";
}
return "You are working as ". $this->name;
}
}
$me = new me();
$me->work(); // anonymous
$me = new me('foo');
$me->work(); // foo
-3
Author: netcoder, 2011-05-03 01:32:54