2012-08-16 58 views
1

我想調用一個方法,如果沒有方法被調用,具體的例子:檢查的方法是否已被調用,如果不調用特定的方法

文件foo.php只會包含

$p = new Foo(); 

沒有方法被調用的事實會觸發一個特定的方法。

文件foo.php將現在包含

$p = new Foo(); 
$p->bar(); 

這不會觸發特定的方法,因爲一個方法被調用。

要做到這一點的目的是要爲使用我的課程的用戶在開始時顯示幫助。

另外我正在考慮使用__destruct(),但我不太確定何時會調用destruct。

+2

這是真的*** ***有必要嗎?我想你必須大幅改變你現有的代碼,以獲得如此微不足道的東西。最好花時間寫出好的文檔。 – deceze 2012-08-16 08:21:16

+3

只有一個私有布爾屬性,當對象被實例化時,以及當任何公共方法被調用時,它被初始化爲'false'設置爲'true'。在'__destruct()'中檢查屬性是否仍然是'false',如果是,則調用你的「特定方法」。 – DaveRandom 2012-08-16 08:21:27

+0

在這篇文章中混淆的數量是絕對驚人的。 PHP真的對人們的大腦做了些什麼,我發誓。 – Pierreten 2012-08-16 08:22:01

回答

4

按DaveRandoms 驚人評論:

class fooby 
{ 
    private $hasCalled=false; 

    function __destruct() 
    { 
     if(!$this->hasCalled) 
     { 
      // Run whatever you want here. No method has been called. 
      echo "Bazinga!"; 
     } 
    } 

    public function someFunc() 
    { 
     $this->hasCalled=true; 
     // Have this line in EVERY function in the object. 
     echo "Funky Monkey"; 
    } 
} 

$var1 = new fooby(); 
$var1->someFunc(); // Output: Funky Monkey 
$var1 = null; // No triggered trickery. 

$var2= new fooby(); 
$var2 = null; // Output: Bazinga! 
3

__destruct()是正確的。

class Foo { 

    private $method_invoked = false; 

    public function bar(){ 
     $this->method_invoked = true; 
     print 'bar'; 
    } 

    function __destruct(){ 
     if(!$this->method_invoked) { 
      print 'destr'; 
     } 
    } 

} 
+1

感謝downwote沒有任何意見 – 2012-08-16 08:25:52

+0

你走了,現在你甚至 - 你用了DaveRandom建議和我剛剛發佈的相同想法。 – Fluffeh 2012-08-16 08:36:50

+0

是的,我確實是;) – 2012-08-16 09:01:26

相關問題