Tenho duas classes: Action
e MyAction
. Este último é declarado como:
class MyAction extends Action {/* some methods here */}
Tudo que preciso é um método na Action
classe (apenas nele, porque haverá muitas classes herdadas e não quero implementar esse método em todas elas), que retornará classname de uma chamada estática. Aqui está o que estou falando:
Class Action {
function n(){/* something */}
}
E quando eu chamo:
MyAction::n(); // it should return "MyAction"
Mas cada declaração na classe pai tem acesso apenas à __CLASS__
variável da classe pai , que tem o valor “Ação”.
Existe alguma maneira possível de fazer isso?
fonte
get_called_class()
:)new static();
de dentro de um método estático privado (usando xampp no Windows e php> 5.5).:s
Desde o 5.5 você pode usar
class
palavras-chave para a resolução do nome da classe , o que seria muito mais rápido do que fazer chamadas de função. Também funciona com interfaces.fonte
Não é a solução ideal, mas funciona em PHP <5.3.0.
O código foi copiado de septuro.com
fonte
Agora (quando o 5.3 chegar) é muito simples:
http://php.net/manual/en/function.get-called-class.php
fonte
fonte
Não há como, nas versões PHP disponíveis, fazer o que você quer. A solução de Paul Dixon é a única. Quero dizer, o exemplo de código, como o recurso de vinculação estática tardia de que ele está falando, está disponível a partir do PHP 5.3, que está em beta.
fonte
(PHP 5> = 5.3.0, PHP 7)
get_called_class - O nome da classe "Late Static Binding"
este link pode ser útil
fonte