Проще будет, если показать код:
$this->act = 'Registration';
require_once MODS_DIR . $this->act .'.class.php';
$this->act::instance();
Такой способ, конечно же, не работает, ибо таким обрадом мы обращаемся к статической переменной класса, который должен быть записан в член нынешнего класса. Вот вопрос. Что сделать с этой $this->act, чтобы использовать ее для обращения к классу? Чтобы в результате получилось: Registration::instance(); ?
Спустя 4 минуты, 43 секунды (19.10.2011 - 17:07) Winston написал(а):
Вроде все правильно, а ошибки выдает какие ?
Спустя 34 секунды (19.10.2011 - 17:07) AlmazDelDiablo написал(а):
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM на строку, где у меня $this->act::instance();
Спустя 3 минуты, 57 секунд (19.10.2011 - 17:11) Winston написал(а):
А так ?
$act = $this->act;
$act::instance();
Спустя 1 минута, 48 секунд (19.10.2011 - 17:13) AlmazDelDiablo написал(а):
Та же ошибка.
Спустя 9 минут, 5 секунд (19.10.2011 - 17:22) alex12060 написал(а):
AlmazDelDiablo
Расскажи нам об области видимости этой переменной act?
Расскажи нам об области видимости этой переменной act?
Спустя 3 минуты, 53 секунды (19.10.2011 - 17:26) AlmazDelDiablo написал(а):
Вот:
class Engine {
private $act;
private function switcher() {
$this->act = 'Registration';
require_once MODS_DIR . $this->act .'.class.php';
$this->act::instance( $this->init );
}
}
Спустя 4 минуты, 30 секунд (19.10.2011 - 17:30) alex12060 написал(а):
class test {
private $act;
public function a() {
$this->act = 'a';
$c = $this->act;
$c::test();
}
}
class a {
public static function test() {
echo 'lol';
}
}
$my = new test;
$my->a();
тут же все работает. У тебя должно работать как сказал тебе Winston.
Спустя 34 секунды (19.10.2011 - 17:31) ZSH написал(а):
если мне не изменяет память то:
Цитата |
$act = $this->act; $act::instance(); |
для версии PHP 5.3.*, а по другому никак.
P.S. То есть нельзя использовать переменную в имени класса при вызове статического метода.
Спустя 5 минут, 14 секунд (19.10.2011 - 17:36) Winston написал(а):
ZSH
Верно.
Верно.
Спустя 1 минута, 9 секунд (19.10.2011 - 17:37) alex12060 написал(а):
А вообще, вот:
DavMe 01-Oct-2010 07:03
When you have a class name in a variable and want to create a new instance of that class, you can simply use:
If, however, you have a class that is part of a singleton pattern where you cannot create it with new and need to use:
...you quickly discover that it fails miserably with a variable.
Fail Example:
After a few days of head pounding, I finally put together this workaround:
I hope this saves you some effort and if anyone knows of a non-eval method to accomplish this, please share!
Thanks!
DavMe 01-Oct-2010 07:03
When you have a class name in a variable and want to create a new instance of that class, you can simply use:
<?php
$className = "ClassName";
$instance = new $className();
?>
If, however, you have a class that is part of a singleton pattern where you cannot create it with new and need to use:
<?php
$instance = ClassName::GetInstance();
?>
...you quickly discover that it fails miserably with a variable.
Fail Example:
<?php
$className = "ClassName";
$instance = $className::GetInstance();
?>
After a few days of head pounding, I finally put together this workaround:
<?php
$className = "ClassName";
eval('$instance = '.$className.'::GetInstance();');
?>
I hope this saves you some effort and if anyone knows of a non-eval method to accomplish this, please share!
Thanks!
Спустя 8 минут, 25 секунд (19.10.2011 - 17:46) AlmazDelDiablo написал(а):
Вот так заработало:
Спасибо большое, ребят :).
eval( $this->act .'::instance( $this->init );' );
Спасибо большое, ребят :).
Спустя 5 минут, 18 секунд (19.10.2011 - 17:51) ZSH написал(а):
Цитата |
P.S. То есть нельзя использовать переменную в имени класса при вызове статического метода. |
только статического метода!!!
$a = 'Class';
$b = new $a;
Так можно.
Спустя 3 минуты, 48 секунд (19.10.2011 - 17:55) AlmazDelDiablo написал(а):
Цитата (ZSH @ 19.10.2011 - 19:51) | ||
только статического метода!!! $a = 'Class'; Так можно. |
Да-да, уже проверял такое ). С не статическим все работает.
Спустя 3 часа, 8 минут, 13 секунд (19.10.2011 - 21:03) Гость_Greg1978 написал(а):
Да статика ниже версии 5.3 не работает. Сам хотел использовать когда то такое

_____________
Блог | VK | GitHub | Twitch