2014-11-05 6 views
0

Можно ли создать новый объект в __constructor()? поэтому я могу использовать класс в методе текущего класса.Создать новый объект в функции __constructor PHP

Пусть у меня есть этот класс

class Config{ 

    public function configure($data){ 

    } 
} 

и я хочу использовать Config в некоторых Myclass метода, как это:

include 'Config.php' 

class Myclass { 
    function __construct(){ 
    $this->conf = new Config(); //just create one config object 
    } 

    public function method1($data){ 
    $this->conf->configure($data); //call the configure method 
    } 


    public function method2(){ 
    $this->conf->configure($data); //call again the configure method 
    } 

} 

я могу сделать так выше. или я должен создать новый объект часто, как это показано ниже:

class Myclass { 

    public function method1($data){ 
    $this->conf = new Config(); //create config object 
    } 

    public function method2($data){ 
    $this->conf = new Config(); //create again config object 
    } 
} 

Поскольку я был новичком в написании своего собственного кода PHP ООП Я хотел бы знать, какой метод эффективны, когда я хочу, чтобы создать один объект и использовать его в много функция. Благодаря!

+0

узнайте о специальном объекте $ this. Здесь Если вы используете $ this-> conf, вы должны объявить это свойство нестационарным способом для его получения. i.e 'public $ conf' или' protected $ conf' или 'private $ conf' – gvgvgvijayan

+0

Почему бы не расширить файл' Config'? –

+0

Извините, я отредактировал мой вопрос. Я не расширил конфигурацию, потому что просто хочу использовать метод Config в некоторой функции, а не во всех. –

ответ

0

Вы можете попробовать

protected $objDb; 

public function __construct() { 
$this->objDb = new Db(); 
} 

Пожалуйста, обратитесь PHP DBconnection Class connection to use in another

Смотрите, если это помогает

+0

Мой вопрос: как я могу использовать один объявленный объект во многих функциях. Невозможно подключиться к базе данных с помощью класса. –

+0

Я дал ссылку, как в приведенном выше коде, новый объект объявляется внутри метода. Вы можете игнорировать часть базы данных – Sambhav

+0

О, теперь я вижу, что вы там помогаете. Спасибо! –

1

Объявить $conf first.try это -

include 'Config.php'; 

class Myclass { 

    private $conf; 
    function __construct(){ 
    $this->conf = new Config(); //just create one config object 
    } 

    public function method1($data){ 
    $this->conf->configure($data); //call the configure method 
    } 


    public function method2(){ 
    $this->conf->configure($data); //call again the configure method 
    } 

} 
+0

ok Я пробую это первым. Спасибо! –

0

Можно, конечно, создать экземпляр нового объекта в конструкторе. Вы также можете передать в него объект.

class Foo 
{ 
    private $bar; 

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

Существует целая концепция вокруг нее под названием «Инъекция зависимостей».

Если вы проектируете свои классы следующим образом, вы всегда можете переключить $ bar для любого другого объекта, который реализует BarInterface.

+0

Ага "Инъекция зависимостей". Я должен узнать больше об этом. Кстати, спасибо за обмен! –

0

Помимо приведенных выше решений, вы также можете расширить его, сделав файл Config суперклассовым.

class Config{ 
    // create a constructor method 
    public function __construct() { 
    // some initialisation here 
    } 

    public function configure($data){ 

    } 
} 

Затем вы можете расширить этот класс в своем коде использовать inheritance.

include 'Config.php' 

class Myclass extends Config { 
    function __construct(){ 
    parent::__construct(); //initialise the parent class 
    // more initialisation 
    } 

    public function method1($data){ 
    $this->configure($data); //call the configure method 
    } 


    public function method2(){ 
    $this->configure($data); //call again the configure method 
    } 

} 

Надеюсь, это поможет.

+0

yah это очень полезно. Спасибо за обмен! –

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

  • Нет связанных вопросов^_^