вызывать метод класса из включенного файла, может устанавливать переменную класса, но не вызывать метод / функцию - PullRequest
2 голосов
/ 18 июля 2011

У меня есть очень простой класс

if(!isset($_GET['page'])) {
    $_GET['page'] = "home";

}

class be_site {

    var $thelink;

    public function get_static_content($page) {

        $this->check_path($page);

    } // end function

    private function check_path($pathfile) {

        if(file_exists($pathfile)) {
          $b = 1;
          include_once($pathfile);
        } else {
          $b = 2;
          include_once('error_page.php');
        }

    }// End Function

    public function selectedurl($subpage, $linkname){
        if($subpage == $this->thelink) {
            echo "<strong>" . $linkname . "</strong>";              
        } else {
            echo $linkname;
        }// End if

    } // End function


 } /// End site class

Теперь я создаю новый объект в index.php

include('connections/functions.php'); $site_object = new be_site;

Всодержание у меня есть

//get file
if(isset($_GET['subpage'])){
  $site_object->get_static_content('content/' . $_GET['subpage'] . '.php');
       }else {
  $berkeley_object->get_static_content('content/' . $_GET['page'] . '.php');
}

Хорошо, так что все работает нормально.Но если вызывается включенная страница, я использую попытку использовать другой метод, чтобы обернуть ссылку и сделать ее жирной, если она выбрана в зависимости от значения $ _GET ['page'].

, например

<ul>
    <li><a href="index.php?page=team&amp;subpage=about" target="_self" title="opens in same window" >
    <?php $site_object->thelink = "about_us";
          $site_object->selectedurl($_GET['subpage'],'about Our Website'); ?>
    </a>
    </li>...

И так далее для каждой ссылки.Теперь можно установить переменную в объекте, но не вызывать метод.Я получаю сообщение об ошибке

   Fatal error: Call to undefined method stdClass::selectedurl()

Интересно, почему я могу установить переменную $ thelink в классе из включенного файла, но не вызвать публичную функцию?

Спасибо

1 Ответ

2 голосов
/ 18 июля 2011

Изменить этот код:

<?php $site_object->thelink = "about_us";
      $site_object->selectedurl($_GET['subpage'],'about Our Website'); ?>

К этому:

<?php 
      global $site_object;
      $site_object->thelink = "about_us";
      $site_object->selectedurl($_GET['subpage'],'about Our Website'); ?>

Причина, по которой это не работает, заключается в природе использования include внутри функции. Если вы используете include внутри функции (be_site :: check_path), область видимости переменной зависит от этой функции. См. http://php.net/manual/en/function.include.php пример № 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...