PHP, различать вызов внутреннего и внешнего класса

Не могу обернуться вокруг этого, есть ли способ проверить, был ли метод вызван внутренне? Под этим я подразумеваю трассировку, чтобы проверить, был ли он вызван значением $ this, а не указателем на экземпляр. Вроде как понятие частной функции, но только функция общедоступна?

<?php class Foo { public function check () { /* if invoked by $this (internally) return true else return false */ } public function callCheck () { /* returns true because its called by $this */ return $this->check(); } } $bar = new Foo; // this should return false because we are calling it from an instance $bar->check(); // where as this will return true $bar->callCheck(); ?> 

Может быть, это неуместно, но мне это действительно нужно для моего проекта в университете? Любой сталкивается с решением или знает, как я буду определять решение.

Благодарю.

Solutions Collecting From Web of "PHP, различать вызов внутреннего и внешнего класса"

Ниже решение не работает.


Вы можете использовать debug_backtrace, но он будет медленным. Я действительно советую вам найти другой способ решить проблему, которую вы пытаетесь преодолеть.

 <?php public function check() { $trace = debug_backtrace(); if ($trace[1]['class'] == 'MyClassName') { return true; } return false; } 

если у вас есть вызов $ bar-> callCheck (); контроль выхода из функции check ();

сначала он перейдет в callCheck (), после чего он будет проверять () и возвращаться оттуда

debug_backtrace (); должно сработать. поместите debug_backtrace (); внутри проверка () способ.

сделай это:

$ t = debug_backtrace (); var_dump ($ т);

отсюда вы должны проверить $ t ['function'] и $ t ['class'], объединить эти 2, вы должны узнать, является ли вызов внешним или внутренним.

здесь вышло из моей машины, версия php – 5.2.14.

 array(1) { [0]=> array(7) { ["file"]=> string(15) "C:\php\test.php" ["line"]=> int(24) ["function"]=> string(5) "check" ["class"]=> string(3) "Foo" ["object"]=> object(Foo)#1 (0) { } ["type"]=> string(2) "->" ["args"]=> array(0) { } } } array(2) { [0]=> array(7) { ["file"]=> string(15) "C:\php\test.php" ["line"]=> int(18) ["function"]=> string(5) "check" ["class"]=> string(3) "Foo" ["object"]=> object(Foo)#1 (0) { } ["type"]=> string(2) "->" ["args"]=> array(0) { } } [1]=> array(7) { ["file"]=> string(15) "C:\php\test.php" ["line"]=> int(26) ["function"]=> string(9) "callCheck" ["class"]=> string(3) "Foo" ["object"]=> object(Foo)#1 (0) { } ["type"]=> string(2) "->" ["args"]=> array(0) { } } }