2014-06-06 121 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