2014-06-06 120 views
0

保存在一個類的對象想象這個場景參數的函數:呼叫與PHP

Class A extends B{ 
    public function hi(){ 
     echo $this->myVar->greeting("Hello", "World"); 
    } 
} 

Class B{ 
    public $myVar; 

    public function __construct(){ 
     $this->myVar->greeting = $this->myFunction($x, $y); 
    } 

    public function myFunction($x, $y){ 
     return $x." ".$y; 
    } 
} 

$myClass = new A(); 
$myClass->hi(); 

我想要做的就是把一個類的屬性($ myVar的)的函數,而在同一個班級。 並從另一個班級(「孩子班級」)調用它。

這可能嗎?

我知道,從類AI可以這樣做:

$this->myFunction("Hello", "World"); 

但我想要做的複雜的版本:-)

我想要的是像$ myVar的內部的別名,它調用功能。 在此先感謝。

+0

如果A擴展B,就像在你的榜樣,你仍然可以使用'$這個 - > myFunction的()'內部的... – naththedeveloper

+0

是的,我知道,我說:-) – Mikel

+0

我很困惑由你的問題。屬性是屬性,功能是功能。 '$ this-> greeting()'會調用一個函數,'$ this-> greeting'會調用一個屬性。這是如何構建PHP,我認爲它不會改變。爲什麼不直接給你的屬性 - 方法混合使用一種方法並且用它來完成呢? 「放入一個類屬性($ myVar)函數」意味着創建一個函數。 –

回答

1

,如果你想greeting是可變$myVar的類中的功能,你應該嘗試像

Class B{ 
    public $myVar; 

    public function __construct(){ 
     $this->myVar->greeting ='self::myFunction'; 
    } 

    public static function myFunction($x, $y){ 
     return $x." ".$y; 
    } 
} 

請注意,我使myFunction成爲一個靜態函數。在PHP 5.4中,當使用參數調用字符串變量時,它將搜索具有該名稱的函數。

編輯:

空值警告可以通過事先申報的財產來解決。無論如何,我必須訴諸整個事情call_user_func工作。

Class A extends B{ 
    public function hi() 
    { 
     echo call_user_func($this->myVar->greeting,'Hello','World'); 
    } 
} 

Class B{ 
    public $myVar; 

    public function __construct() 
    { 
     $this->myVar=new StdClass(); 
     $this->myVar->greeting ='self::myFunction'; 
    } 

    public static function myFunction($x, $y) 
    { 
     return $x." ".$y; 
    } 
} 

$myClass = new A(); 
$myClass->hi(); 
+0

恐怕它不工作:'從空值創建默認對象'。你可以在這裏看到它:http://sandbox.onlinephpfunctions.com/code/83c551513bbbeefe3e041416e3134a81f14b0fa4 – Mikel

+0

它的工作原理!非常感謝 – Mikel