I have 2 classes, main and extended. I need to use main vars in extended class.
<?php
class Main {
  public $vars = array();
}
$main = new Main;
$main->vars['key'] = 'value';
class Extended extends Main { }
$other = new Extended;
var_dump($other->vars);
?>
Who I can do it?
No valid for example:
<?php
class Extended extends Main {
  function __construct ($main) {
    foreach ($main as $k => $v) {
      $this->$k = $v;
    }
  }
}
?>
I need some solution more transparent and efficient :)
It would be easily possible with a simple constructor
<?php
class One {
    public static $string = "HELLO";
}
class Two extends One {
    function __construct()
    {
        parent::$string = "WORLD";
        $this->string = parent::$string;
    }
}
$class = new Two;
echo $class->string; // WORLD
?>
                        EDIT: This can be solved much better with Inversion of Control (IoC) and Dependency Injection (DI). If you use your own framework or one without Dependency Injection Container try League/Container
Answer below left as history of foolish answers.
The correct way I figure.
<?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";
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With