簡體   English   中英

oop-在子/繼承函數中使用父參數

[英]oop - using parent parameters in child/inherited function

我有以下腳本:

<?php
class A {
    protected static $aliases = [];

    public static function doSomething()
    {
        foreach (self::$aliases as $column => $alias) {
           // do something
           echo "$column: $alias" . PHP_EOL;
        }
    }
}
class B extends A {
    protected static $aliases = [
        'id' => 'real_id',
        'name' => 'real_name',
    ];
}

$obj = B::doSomething(); // does nothing

如何讓B繼承函數但使用其自己的參數? 我試圖創建一個getInstance類型的函數,但是我認為我沒有正確理解該概念,因此無法正常工作。 從那以后,我將此功能轉換為特征-它似乎仍然提供相同的結果。

任何和所有幫助表示贊賞。

你需要改變self::$aliases ,以static::$aliasesB的別名內的A

看到這里: https : //3v4l.org/h3dP4

<?php

class A {
    protected static $aliases = [];

    public static function doSomething()
    {
        foreach (static::$aliases as $column => $alias) {
           // do something
           echo "$column: $alias" . PHP_EOL;
        }
    }
}
class B extends A {
    protected static $aliases = [
        'id' => 'real_id',
        'name' => 'real_name',
    ];
}

$obj = B::doSomething();

這個答案做得更好,解釋了它為什么起作用: 在PHP中self :: $ bar和static :: $ bar有什么區別?

嘗試使用static這樣訪問child屬性

public static function doSomething()
{
    foreach (static::$aliases as $column => $alias) {
       // do something
       echo "$column: $alias" . PHP_EOL;
    }
}

看看http://php.net/manual/en/language.oop5.late-static-bindings.php以獲得更好的參考

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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