关于一个类构造函数的问题

帖子列表 发布于 2013/04/17 11:14
阅读 176
收藏 0
PHP
$CFG = array('a','b');

class Controller {

    protected $CFG;

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


class Default_Controller extends Controller {

	public function __construct(){
            parent::__construct();
            var_dump($this->CFG);
	}
}

$aaa = new Default_Controller();

怎样可以把$CFG的访问改造得简洁优雅一点?尤其我不想麻烦子类每次都parent::__construct(); 才能取得到$CFG
 
加载中
0
hylent
hylent
<?php

// config.php

return array(
    'siteName' => 'xx',
    'dbOptions' => array(
        'charset' => 'utf8',
    ),
);



class Controller
{
    public function __construct(array $config)
    {
        $this->config = $config;
    }

    protected $config;
}

$c = new Controller(require 'config.php');


class Config
{
    public static function getInstance()
    {
        static $s = null;
        if ($s === null)
        {
            $s = new static();
            $s->config = require 'config.php';
        }

        return $s;
    }

    public function __get($name)
    {
        if (isset($this->config[$name]))
            return $this->config[$name];
    }

    final protected function __construct()
    {
    }

    final protected function __clone()
    {
    }
}

class Controller
{
    public function testAction()
    {
        $siteName = Config::getInstance()->siteName;
        // ..
    }
}
帖子列表
帖子列表
谢谢指导!既然Config类是用静态方法,为什么不直接用Config::get()来获取,呵呵,我没想到呢
0
hylent
hylent

还在使用global么 那还是别用oop了吧

 传参config array  封装config单例类  注册config服务

帖子列表
帖子列表
我也讨厌使用global啊,可是没想到什么好方法,您说的意思是把Config的数组作为参数传递给Controller类的构造函数,作为Controller类的一个属性对吗?
0
Tuesday
Tuesday

可以在实例化Default_Controller前对Controller进行实例.

class demo extendsController {

    #  我什么都不做. 仅实现化demo

}

new demo();

$aaa=newDefault_Controller();

返回顶部
顶部