2014-09-07 2 views
0

У меня есть два класса, основной класс - app.php в корневом каталоге и db.php в \ system Как получить свойство $ config в базе классов, с шаблоном пространства имен ?? Я хочу, чтобы получить $ конфига в базовом классе, это то, что я хочуДоступ Свойство класса в родительском пространстве имен

Я определяю конфигурации для имени хоста, пользователя, передать то я объявляю базовый класс остроумие нового \ App \ базовый я могу получить конфиг в классе дб ​​

<?php 
// \App.php 
namespace App; 
class base{ 
    private $config; 
    private $db; 
    function __construct($config){ 
     $this->config = $config; 
     $this->db = new \App\system\db; 
    } 
    public function getTest() { 
     return $this->test; 
    } 
} 

function load($namespace) { 
    $splitpath = explode('\\', $namespace); 
    $path  = ''; 
    $name  = ''; 
    $firstword = true; 
    for ($i = 0; $i < count($splitpath); $i++) { 
     if ($splitpath[$i] && !$firstword) { 
      if ($i == count($splitpath) - 1) { 
       $name = $splitpath[$i]; 
      } else { 

       $path .= DIRECTORY_SEPARATOR . $splitpath[$i]; 
      } 
     } 

     if ($splitpath[$i] && $firstword) { 
      if ($splitpath[$i] != __NAMESPACE__) { 
       break; 
      } 

      $firstword = false; 
     } 
    } 
    if (!$firstword) { 
     $fullpath = __DIR__ . $path . DIRECTORY_SEPARATOR . $name . '.php'; 
     return include_once ($fullpath); 
    } 
    return false; 
} 

function loadPath($absPath) { 
    return include_once ($absPath); 
} 
spl_autoload_register(__NAMESPACE__ . '\load'); 
?> 

<?php 
// \System\db.php 
namespace App\system; 
class db{ 
    private $config; 
    function __construct(){ 
     $this->config = "How To Get property $config in class base, with namespace pattern??"; 
    } 
} 
?> 
+0

это действительно трудно понять, что вы пытаетесь сделать? Нет шаблона пространства имен. Возможно, вы не поняли, для каких пространств имен. Прочитайте php doc о них. –

+0

В вашем db.php вам нужно ввести 'use App \ base;', а затем в class '$ this-> base = new base; $ basetest = $ this-> base-> getTest() ', но, конечно, базовый класс должен быть загружен (требуется). –

+0

Я просто обновляю полный код, помогите –

ответ

0

Я хотел бы предложить вам что-то вроде этого:

class db{ 
    private $test; 
    function __construct(){ 
    include('../app.php'); 
    $app = new base(); 
    $this->test = $app->getTest(); 
    } 
} 
0

Ну, просто передать конфигурации при создании объекта БД. Также используйте ключевое слово use для лучшей читаемости.

\ App

namespace App; 

use \App\system\db; 

class base { 
    private $config; 
    private $db; 
    function __construct($config){ 
     $this->config = $config; 
     $this->db = new db($config); 
    } 
    public function getTest() { 
     return $this->test; 
    } 
} 

\ System \ db.php

namespace App\system; 

class db { 
    private $config; 
    function __construct($config){ 
     $this->config = $config; 
    } 
} 
+0

спасибо, ну, я уже использую этот путь, мне нужно сделать это без прохождения paramater, поэтому его можно динамически вызвать в другом классе, таком как db, которому нужен конфигурационный массив –

Смежные вопросы