簡體   English   中英

PHP OOP:育兒對象/函數?

[英]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() 實際上,我什至不能確定您的方式是否是有效的語法。 但是我離題了。

至於您的特定問題,您可以:

  1. 添加一個構造函數(並從addArray()刪除->arraybase()調用):

     public function __construct() { $this->array = new ArrayObject(); } 
  2. 在對->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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM