加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在PHP中的扩展类中使用父变量

发布时间:2020-12-13 16:39:43 所属栏目:PHP教程 来源:网络整理
导读:我有2个课程,主要和扩展.我需要在扩展类中使用主变量. ?phpclass Main { public $vars = array();}$main = new Main;$main-vars['key'] = 'value';class Extended extends Main { }$other = new Extended;var_dump($other-vars);? 我能做谁? 无效例如: ?ph
我有2个课程,主要和扩展.我需要在扩展类中使用主变量.
<?php
class Main {
  public $vars = array();
}

$main = new Main;

$main->vars['key'] = 'value';

class Extended extends Main { }

$other = new Extended;

var_dump($other->vars);

?>

我能做谁?

无效例如:

<?php
class Extended extends Main {
  function __construct ($main) {
    foreach ($main as $k => $v) {
      $this->$k = $v;
    }
  }
}
?>

我需要一些更透明,更有效的解决方案:)

编辑:使用控制反转(IoC)和依赖注入(DI)可以更好地解决这个问题.如果您使用自己的框架或没有依赖注入容器的框架,请尝试 League/Container

下面的回答是愚蠢答案的历史.

我想的正确方法.

<?php
class Config {
    protected $_vars = array();

    protected static $_instance;

    private function __construct() {}

    public static function getInstance()
    {
        if (!isset(self::$_instance)) {
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    public function &__get($name) {
        return $this->_vars[$name];
    }

    public function __set ($name,$value) {
        $this->_vars[$name] = $value;
    }
}

$config = Config::getInstance();
$config->db = array('localhost','root','');
$config->templates = array(
    'main' => 'main','news' => 'news_list'
);

class DB {
    public $db;

    public function __construct($db)
    {
        $this->db = $db;
    }

    public function connect()
    {
        mysql_connect($this->db[0],$this->db[1],$this->db[2]);
    }
}

$config = Config::getInstance();
$db = new DB($config->db);
$db->connect();

class Templates {
    public $templates;

    public function __construct($templates)
    {
        $this->templates = $templates;
    }

    public function load ($where) {
        return $this->templates[$where];
    }
}

$config = Config::getInstance();
$templates = new Templates($config->templates);
echo $templates->load('main') . "n";

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读