我看到很多代碼,其中的調用是這樣的。如何實現這個:object-> object-> property
一個例子:
$person->head->eyes->color = "brown";
$person->head->size = 10;
$person->name = "Daniel";
如何實現我上面寫的?
我看到很多代碼,其中的調用是這樣的。如何實現這個:object-> object-> property
一個例子:
$person->head->eyes->color = "brown";
$person->head->size = 10;
$person->name = "Daniel";
如何實現我上面寫的?
這僅僅意味着$person
,$person->head
和$person->eyes
各自有其他對象的屬性。 head
是$person
,eyes
的財產,是$person->head
的財產,依此類推。
因此,例如,當您設置$person->head->size
時,您正在設置size
屬性$person->head
,這意味着$person->head
必須是對象。換句話說,$person->head->size = 10;
表示set the size property of the head property of $person to 10
。
示例代碼:
<?php
class Eyes
{
var $color = null;
}
class Head
{
var $eyes = null;
var $size = null;
function __construct()
{
$this->eyes = new Eyes();
}
}
class Person
{
var $head = null;
var $name = null;
function __construct()
{
$this->head = new Head();
}
}
$person = new Person();
$person->head->eyes->color = "brown";
$person->head->size = 10;
$person->name = "Daniel";
var_dump($person);
此輸出:
class Person#1 (2) {
public $head =>
class Head#2 (2) {
public $eyes =>
class Eyes#3 (1) {
public $color =>
string(5) "brown"
}
public $size =>
int(10)
}
public $name =>
string(6) "Daniel"
}
看起來確實很好,這種做事方式有沒有名字? – Daniel
實際上,即使它看起來不錯,它可以是非常混亂,不建議實踐。應該通過getter/setter方法不直接訪問屬性 –
@Daniel我不認爲它有一個名字。這只是面向對象編程的一個特性,您可以將對象的屬性設置爲另一個對象。 –
PHP方法chaning是祕密,回報每一個getter方法$這一
class Person
{
public function head()
{
...
return $this;
}
public function eyes()
{
...
return $this;
}
}
$person->head->eyes->color = "brown";
這是不完全正確的。它將是$ person-> head() - > eyes() - > color; –
這不是鏈接的方法。 'head'和'eyes'不是'$ person-> head-> eyes-> color'中的方法;他們是屬性。 –
我以爲這是一個普遍的問題,不是特別針對那個代碼 – mischaZeng
第一件事:有沒有被稱爲在您的示例方法。
答案:
這可以通過使用另一個對象實例的屬性來實現。例如:
class Head{
public $size, $eyes, $etc;
}
class Person{
public $name, $age, $head;
public function __construct(){
$this->head = new Head();
}
}
$person = new Person();
$person->head->size = 'XL';
這是做
您也可以施放數組作爲對象的一種方式。這將產生與數組索引的屬性stdClass的實例:
$person = array(
'name' => 'Foo',
'age' => 20
);
$personObject = (object) $person;
var_dump($personObject);
嘗試閱讀這些文章: http://www.techflirt.com/tutorials/oop-in-php/php-method-chaining.html https://en.wikipedia.org/wiki/Method_chaining –
@ElzoValugi,這不是方法鏈接 – swidmann
@swidmann你會怎麼稱呼它? – Daniel