S4urp8n
@S4urp8n
WEB-разработчик

Как определить в самом статическом методе каким образом он был вызван?

<?php
 
  class Test {
    static public function sayHi() {}
  }
   
  $obj = new Test;
  
  //первый вариант вызова
  $obj::SayHi();
  //второй вариант вызова
  $obj->sayHi();  
?>
  • Вопрос задан
  • 161 просмотр
Решения вопроса 1
@Afatar
Можно так
<?php
class Test{
	private static function get_name(){
		return "Vasiliy";
	}
	public  function __call($one,$two) {
		
		return self::get_name();
		}
	public static function __callStatic($one,$two){
		echo "Static method";
		return self::get_name();}
}

$obj=new Test;
echo $obj->get_name()."<br>";;
echo Test::get_name();

Вывод
Vasiliy
Static methodVasiliy
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
akubintsev
@akubintsev
Опытный backend разработчик
Вы описали же сами его как статический метод?
Используйте флаг в настойках ошибок STRICT, чтобы генерировалось предупреждение при неправильном использовании метода.
Ответ написан
Комментировать
BuriK666
@BuriK666
Компьютерный псих
Никак.
debug_print_backtrace выводит:
#0 Test::sayHi() called at [/tmp/test.php:11]
#0 Test::sayHi() called at [/tmp/test.php:13

Т.е. сам PHP движок не различает эти два вызова.

PS: Можно конечно посмотреть откуда был вызов, открыть этот файл и посмотреть как был сделан вызов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы