2012-06-27 3 views
1

Я довольно новыми для PHP ООП, проблема, что я есть, что я не могу обернуть мою голову вокруг последующей компоновкой моего сценария: устанавливаетсяOO PHP Функции

  • основной класс, который устанавливает страницу и расширяет класс mysql и создает соединение с базой данных через __construct
  • в основном классе i запускает публичную функцию, которая включает() файл и обращается к функции, которая находится в этом файле include
  • в функции, которая является в включенном файле я, похоже, не могу получить доступ к основному классу через ни настоящую глобальную переменную, либо использовать $ this-> blah

У кого-нибудь есть указатели или направление. я попытался найти его, но не смог найти ничего, что было бы близко к тому, что я пытался сделать.

он начал с: - работает

$gw = new GWCMS(); 

затем внутри _construct из GWCMS(), который GWCMS расширяет MySql - работает

parent::__construct(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME); 
$this->build(); 

затем вызывает сборки() - работает

public function build(){ 
    ... 
    $page['content'] = $this->plugins($page['content']); 
    ... 
    $output = $this->output($theme,$page); 
    echo eval('?>' . $output); 
} 

, который вызывает плагины() - у нас возникают проблемы

public function plugins($content){ 
    $x = 0; 
    if ($handle = opendir(STOCKPLUGINPATH)) { 
     while (false !== ($entry = readdir($handle))) { 
     if(is_dir(STOCKPLUGINPATH . $entry . '/') && $entry != '.' && $entry != '..'){ 
      if(file_exists(STOCKPLUGINPATH . $entry . '/inc.php')){ 
       include(STOCKPLUGINPATH . $entry . '/inc.php'); 
       $content = do_shortcode($content); 
      } 
     } 
     } 
     closedir($handle); 
    } 
    return $content; 
} 

предыдущий код включает в себя inc.php, в котором перечислены файлы, которые будут включать в себя:

include(STOCKPLUGINPATH . 'Test/test.php'); 

test.php содержит список функций. do_shortcode выше обращается к функциям без проблем и, тем не менее, мне нужна следующая функция, которая находится в test.php для доступа к $ gw-> fetchAssoc(); который fetchAssoc в родителю gwcms

function justtesting2($attr){ 
    $config = $gw->fetchAssoc("Select * from gw_config"); 
    foreach($config as $c){ 
     echo $c['value']; 
    } 
} 

, когда я запустить скрипт я получаю

Fatal error: Call to a member function fetchAssoc() on a non-object in /home/globalwe/public_html/inhouse/GWCMS/gw-includes/plugins/Test/test.php on line 9 
+2

Мы должны видеть код. Пожалуйста, разместите только соответствующие детали. –

+0

'$ this' не входит в сферу действия этой функции, почему ваш« глобальный »не работает ... возможно, потому, что он не находится в глобальной области, но в другой области. Трудно сказать без (минималистического!) Примера кода. – Wrikken

+0

Глобальный звук вообще не звучит OOP'ish. – PeeHaa

ответ

0

Написание кода ООП означает реструктуризацию, чтобы избежать беспорядка файлов и функций, упавших в какие-либо файлы, и бог знает, что нет.

Старайтесь использовать класс, который моделирует поведение, которое вы хотите достичь. Класс должен содержать значения свойств, которые несут данные для вас и методы, которые помогают классу вести себя как, как и то, для чего вы его моделируете.

Чтобы ответить на ваш вопрос:

class MyClass { 
    public $my_property = 4; 
    public function MyMethod() { 
     include('file.php'); 
    } 
    public function MyOtherMethod() { 
     $this; // is accessible because MyOtherMethod 
       // is a method of class MyClass 
    } 
} 

// contents of file.php 

$variable = 3; 

function MyFunction($parameter) { 
    global $variable; // is accessible 
    $parameter; // is accessible 
    $this // is not accessible because it was 
      // not passed to MyFunction as a parameter 
      // nor was it declared as a global variable 

    // MyFunction is not a method of class MyClass, 
    // there is no reason why $this would be accessible to MyFunction 
    // they are not "related" in any OOP way 
    // this is called variable scoping and/or object scoping 
} 
0

Когда файлы включены в функции, они имеют доступ из сферы этой функции только:

http://php.net/manual/en/function.include.php#example-136

Вам нужно указать ссылку на объект, который вы создали, на функцию, которая включает файл, или потянуть ее в область этой функции для доступа к ней.