[英]PHP OOP: Parenting objects/functions?
根據以下示例,PHP中的育兒功能如何正確完成? 我可以確保在每次addArray調用時都不會覆蓋我的數組,並且數組中的先前值丟失了嗎?
function arraybase() {
$this->array = new ArrayObject();
return $this;
}
function addArray($value) {
parent::$this->arraybase();
$this->array->append($value);
return $this;
}
$this->addArray('1')->addArray('2')->addArray('3');
// outputs:
Array
(
[0] => 3
)
在function addArray
您繼續使用以下行重新創建數組:
parent::$this->arraybase();
刪除此行並在要創建時調用arraybase。
好吧,首先,您不需要parent::$this->arraybase()
。 只需執行$this->arraybase()
。 實際上,我什至不能確定您的方式是否是有效的語法。 但是我離題了。
至於您的特定問題,您可以:
添加一個構造函數(並從addArray()
刪除->arraybase()
調用):
public function __construct() { $this->array = new ArrayObject(); }
在對->arraybase()
的調用周圍添加if檢查:
public function addArray($value) { if (!isset($this->array) || !is_object($this->array)) { $this->arraybase(); } ... }
就個人而言,我會排名第一。 它將更加可靠,更快,並且更符合OOP范例。
編輯:添加構造函數信息
因此,如果您的基類具有此構造函數:
public function __construct($some, $vars) {
......
}
您可以在擴展類中執行此操作:
public function __construct($some, $vars) {
parent::__construct($some, $vars);
$this->array = new ArrayObject();
}
注意:不要調用parent::__construct()
除非其中一個父母具有__construct方法...
為什么要圍繞ArrayObject設置包裝器? 如果是為了增加鏈接方法調用的可能性,那么最好擴展ArrayObject:
<?php
class MyArrayObject extends ArrayObject {
public function append($value)
{
parent::append($value);
return $this;
}
}
$ao = new MyArrayObject();
$ao->append('a')->append('b')->append('c');
var_dump($ao->getArrayCopy());
/*
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
*/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.