php对象中的嵌套方法
我怎样才能创造出这样的东西php对象中的嵌套方法,php,Php,我怎样才能创造出这样的东西 MyObject->property->method() 在PHP中 我只知道如何为类创建方法: class MyObject { public function MyMethod() { // do something } } 在Javascript中,我可以轻松地执行以下操作 var MyObject = { property : { method : function () {
MyObject->property->method()
在PHP中
我只知道如何为类创建方法:
class MyObject
{
public function MyMethod()
{
// do something
}
}
在Javascript中,我可以轻松地执行以下操作
var MyObject = {
property : {
method : function ()
{
// do something
}
}
}
如何做到这一点?在Javascript中,您可以内联创建对象和方法,在PHP中,您需要有一个
类
并实例化它:
class Foo {
public function method() {}
}
class MyObject {
public $property;
public function __construct() {
$this->property = new Foo;
}
}
$o = new MyObject;
$o->property->method();
在Javascript中,您可以内联创建对象和方法,而在PHP中,您需要有一个
类
,并对其进行实例化:
class Foo {
public function method() {}
}
class MyObject {
public $property;
public function __construct() {
$this->property = new Foo;
}
}
$o = new MyObject;
$o->property->method();
可以将对象设置为特性的值。大概是这样的:
class Foo {
public $Bar;
public function __construct() {
$this->Bar = new Bar();
}
}
class Bar {
public function ShowBar() {
echo 'Bar';
}
}
$Foo = new Foo();
$Foor->Bar->ShowBar();
可以将对象设置为特性的值。大概是这样的:
class Foo {
public $Bar;
public function __construct() {
$this->Bar = new Bar();
}
}
class Bar {
public function ShowBar() {
echo 'Bar';
}
}
$Foo = new Foo();
$Foor->Bar->ShowBar();
正如其他人正确回答的那样,这在PHP和Javascript中的工作方式不同。这些差异也是为什么在PHP中需要在运行类方法之前定义它们的原因。将来它可能会变得更具动态性,但我肯定不是在Javascript级别 但是,您可以在PHP中对此稍加伪装,因为您可以动态地将函数分配给属性:
$myObject = new PropCall;
$myObject->property->method = function() {
echo "hello world\n";
};
$myObject->property->method();
此示例输出:
hello world
这确实有效,因为在实例化对象中添加了一些小魔术:
class PropCall
{
public function __call($name, $args) {
if (!isset($this->$name)) {
return null; // or error handle
}
return call_user_func_array($this->$name, $args);
}
public function __get($name) {
$this->$name = new PropCall;
return $this->$name;
}
}
这个类代码检查是否添加了一个带有被调用方法名称的动态属性,然后将该属性作为函数调用。正如其他人正确回答的那样,这在PHP和Javascript中的工作方式不同。这些差异也是为什么在PHP中需要在运行类方法之前定义它们的原因。将来它可能会变得更具动态性,但我肯定不是在Javascript级别 但是,您可以在PHP中对此稍加伪装,因为您可以动态地将函数分配给属性:
$myObject = new PropCall;
$myObject->property->method = function() {
echo "hello world\n";
};
$myObject->property->method();
此示例输出:
hello world
这确实有效,因为在实例化对象中添加了一些小魔术:
class PropCall
{
public function __call($name, $args) {
if (!isset($this->$name)) {
return null; // or error handle
}
return call_user_func_array($this->$name, $args);
}
public function __get($name) {
$this->$name = new PropCall;
return $this->$name;
}
}
此类代码检查是否添加了具有所调用方法名称的动态属性,然后仅将该属性作为函数调用。不能对属性调用方法。您可以使用
$this->property
访问它,但不能对属性调用方法。您可以使用$this->property
访问它,非常整洁,即:)非常整洁,即:)