2015-02-23 4 views
0

У меня возникла проблема, я хочу, чтобы страница класса знала переменную «$ format».Получить класс, чтобы знать переменную

// class1.php 
<?php 

    include('./class2.php'); 
    echo $format->getTest(); // returns :-) (declared in class2.php) 

    class Page { 

    PUBLIC function getText() { 
     return $format->getTest(); // returns Call to a member function getTest() on null 
    } 

    } 

    $page = new Page; 

?> 
// class2.php 
<?php 

    class Format { 

    PUBLIC function getTest() { 
     return ":-)"; 
    } 

} 

$format = new Format; 

?> 

Любые предложения/идеи?

EDIT:

Я нашел способ: return $GLOBALS['format']->getTest(); Но я не люблю его, его так много, чтобы напечатать. Любой другой способ (ы)?

Филип

+0

[ '$ страница = новая страница ($ формат);'] (HTTP: //php.net/manual/en/la nguage.oop5.decon.php) – PeeHaa

+0

Как это делает '$ format' известным' странице'? В любом случае, я получил больше классов, чем просто «Формат», есть ли другой способ без использования конструктора? Я имею в виду, что я получил varibale в 'class1.php', и каким-либо образом войти в« классную страницу »тоже? – Philip

ответ

0

Правильное объективное решение пройти переменную конструктора, сеттера или в качестве аргумента getText() метода. Выберите тот, который вы найдете наиболее подходящим для вашего дела.

Конструктор

class Page 
{ 
    private $format; 

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

    public function getText() 
    { 
     return $this->format->getTest(); 
    } 

} 

$page = new Page($format); 
echo $page->getText(); 

сеттер

class Page 
{ 
    private $format; 

    public function setFormat(Format $format) 
    { 
     $this->format = $format; 
    } 

    public function getText() 
    { 
     return $this->format->getTest(); 
    } 

} 

$page = new Page; 
$page->setFormat($format); 
echo $page->getText(); 

Довод

class Page 
{ 

    public function getText(Format $format) 
    { 
     return $format->getTest(); 
    } 

} 

$page = new Page; 
echo $page->getText($format); 
+0

Спасибо! Что вы думаете об этом решении, я объявляю конструктор, прохожу через '$ GLOBALS' и объявляю varibale со всем содержимым' $ GLOBALS'? – Philip

+0

Тогда какая точка в использовании объектного кода, если вы хотите, чтобы весь жесткий код? У вас будет класс, который всегда работает одинаково, независимо от того, что вы делаете (потому что он всегда читает глобальную переменную). Это явно не то, что вы хотите, потому что (я полагаю) в будущем появятся новые Форматы, и вы захотите заменить один формат на другой. –

+0

нет, формат - это один класс из многих классов, которые я получил в папке '/ classes'. Я хотел бы реализовать каждый класс, который мне нужен, делая их видимыми – Philip