[英]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::$aliases
指B
的別名內的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.