【问题标题】:php - Access parent class array in child classphp - 在子类中访问父类数组
【发布时间】:2015-08-14 04:55:46
【问题描述】:
class Settings {
    public $constants = [
        'database' => [
            'APP_DB_HOST'       =>  'localhost'
        ],
    ];
}
class Constants extends Settings {
    public $database = [
        'APP_DB_HOST'       =>  $settings->constants['database']['APP_DB_HOST'], // not working
    ];
}

我需要访问子类中的父类数组值。但是这个 $settings->constants['database']['APP_DB_HOST'] 出于某种原因无法正常工作。

【问题讨论】:

标签: php arrays class oop multidimensional-array


【解决方案1】:

这是可行的解决方案

<?php

class Settings {
    public $constants = [
        'database' => [
            'APP_DB_HOST'       =>  'localhost'
        ],
    ];
}
class Constants extends Settings {
    public $database;
    public function __construct(){
        $database = [
            'APP_DB_HOST'       =>  $this->constants['database']['APP_DB_HOST'], // working
        ];
    }
}

print_r(new Constants());

输出:

Constants Object
(
    [database] => 
    [constants] => Array
        (
            [database] => Array
                (
                    [APP_DB_HOST] => localhost
                )

        )

)

根据您的评论, 如果你想在其他类函数中这样做,你也可以这样做。

class Constants extends Settings {
    public $database;
    public function useParentHost(){
        $this->database = [
        'APP_DB_HOST'       =>  $this->constants['database']['APP_DB_HOST'], // working
    ];
    return $this->database;
    }
}

然后

$test = new Constants();
print_r($test->useParentHost());

您必须声明一些函数才能使用$this,如果没有/在function 之外/这将导致错误。

【讨论】:

  • 谢谢。这是将数组放入构造函数的唯一方法吗?
  • 第二种方法更干净,输出更干净,感谢@Dan
  • 你能再讲一件事吗?在课堂之外我做了$constants = new Constants(); 和echo $constants-&gt;constants['database']['APP_DB_HOST']; 它正在工作但不是$constants-&gt;database['APP_DB_HOST'];为什么会这样?
  • 如果你使用第二种方法,你可以通过这个$test = new Constants(); $constants = ($test-&gt;useParentHost()); echo $constants['APP_DB_HOST'];得到localhost
  • 我试过了,但它显示为空。我正在寻找问题。
【解决方案2】:

变量 $settings 不存在,也许你的意思是 $this?

$this->constants['database']['APP_DB_HOST'];

享受吧。

【讨论】:

  • 在class 内直接使用$this 在function 之外会导致错误
  • 啊,是的,好地方!没有注意到他正在尝试初始化属性。但是,您的答案的正确语法不是 $this->database = $this->constants[X]?
  • 是的,但是如果我们使用$this-&gt;database,它会产生像Constants Object ( [database] =&gt; Array ( [APP_DB_HOST] =&gt; localhost ) [constants] =&gt; Array ( [database] =&gt; Array ( [APP_DB_HOST] =&gt; localhost ) ) )这样的输出
猜你喜欢
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多