创建和访问嵌套对象和函数?
Creating and accessing nested objects & functions?
我有一个 class 函数可以像这样查询数据:
// Disclaimer: (None of the following is "real")
class Mockup {
function getData() {
query("SELECT id,name FROM pages")
// Results: $id = 1, $name = "Math Text Book: Grade 7"
}
}
虽然我希望能够访问两个值(即$id和$name),但我只能return单独访问一个值(因此,与 class).
之外的简单查询相比,这是一个劣势。
下面行的内容是否可以与上面的示例代码结合使用?
$test = new Mockup;
echo $test->getData()->id; // Echos "7"
同样,我在各种软件(例如 MediaWiki)中看到了类似以下内容的内容:
$test = new Mockup;
echo $test->getData()->getId(); // Echos "7"
这是否表明也可以嵌套函数?
这不是嵌入式函数,它是方法链接。当方法 return 是 class 实例时,您可以使用它立即使用另一个 class 成员(变量或函数),从而将它们链接在一起。
class Mockup {
public $id;
public $name;
function getData() {
$data = query();
$this->id = $data->id;
$this->name = $data->name;
return $this; // return the instance for chaining
}
function getId() {
return $this->id;
}
function getName() {
return $this->name;
}
}
$mockup = new Mockup();
//unchained
$mockup->getData();
$id = $mockup->getId();
$name = $mockup->getName();
// or
$id = $mockup->id;
$name = $mockup->name;
//chained
$id = $mockup->getData()->getId();
$name = $mockup->getData()->getName();
//or
$id = $mockup->getData()->id;
$name = $mockup->getData()->name;
如果您想同时 return 两者,您可以简单地 return 包含这些值的数组或对象。
仅供参考:使用链接时,您不必 return 您从中调用方法的 class 的实例,您也可以在该方法中创建另一个的新实例class 和 return ,因此您可以从该实例调用成员,例如:
$garage->getVehicle('plane')->fly(); // returns new Plane() with specific methods
$garage->getVehicle('car')->drive(); // returns new Car() with specific methods
我有一个 class 函数可以像这样查询数据:
// Disclaimer: (None of the following is "real")
class Mockup {
function getData() {
query("SELECT id,name FROM pages")
// Results: $id = 1, $name = "Math Text Book: Grade 7"
}
}
虽然我希望能够访问两个值(即$id和$name),但我只能return单独访问一个值(因此,与 class).
之外的简单查询相比,这是一个劣势。下面行的内容是否可以与上面的示例代码结合使用?
$test = new Mockup;
echo $test->getData()->id; // Echos "7"
同样,我在各种软件(例如 MediaWiki)中看到了类似以下内容的内容:
$test = new Mockup;
echo $test->getData()->getId(); // Echos "7"
这是否表明也可以嵌套函数?
这不是嵌入式函数,它是方法链接。当方法 return 是 class 实例时,您可以使用它立即使用另一个 class 成员(变量或函数),从而将它们链接在一起。
class Mockup {
public $id;
public $name;
function getData() {
$data = query();
$this->id = $data->id;
$this->name = $data->name;
return $this; // return the instance for chaining
}
function getId() {
return $this->id;
}
function getName() {
return $this->name;
}
}
$mockup = new Mockup();
//unchained
$mockup->getData();
$id = $mockup->getId();
$name = $mockup->getName();
// or
$id = $mockup->id;
$name = $mockup->name;
//chained
$id = $mockup->getData()->getId();
$name = $mockup->getData()->getName();
//or
$id = $mockup->getData()->id;
$name = $mockup->getData()->name;
如果您想同时 return 两者,您可以简单地 return 包含这些值的数组或对象。
仅供参考:使用链接时,您不必 return 您从中调用方法的 class 的实例,您也可以在该方法中创建另一个的新实例class 和 return ,因此您可以从该实例调用成员,例如:
$garage->getVehicle('plane')->fly(); // returns new Plane() with specific methods
$garage->getVehicle('car')->drive(); // returns new Car() with specific methods