Почему я не могу получить доступ к значению публичной переменной в классе PHP5 из функций класса? - PullRequest
0 голосов
/ 01 апреля 2011

Я использую CodeIgniter 2.0 с PHP5.3.2 на Apache 2.2.14 с сообществом MySQL 5.1.48. Я создал небольшой тестовый контроллер, чтобы изолировать еще одну проблему, и обнаружил, что моя проблема, по-видимому, вызвана доступностью общедоступных переменных. Вызов test1 или test2 приведет к ошибкам, потому что они не могут видеть значение элементов массива, установленных в других функциях. У кого-нибудь есть идеи, почему это не работает? Если да, то каково решение, так как мне нужно иметь возможность доступа к общеклассовым переменным.

Спасибо.

<?php
class Test extends CI_Controller
{
  public $data;

  function __construct()
  {
    parent::__construct();
    $this->data = array();
  }

  function index()
  {
    $this->data['test1'] = 'This is a test of class public variable access.<br />';         
    echo 'Class index() called.<br />';
    echo $this->data['test1'];  
  }

  function test1()
  {
    $this->data['test2'] = 'This is a second test of the class public variable access.<br />';          
    echo 'Class test1 called.<br />';
    echo $this->data['test1'];  
    echo $this->data['test2'];  
  }

  function test2()
  {
    echo 'The data array contains these two entries:<br />';
    echo $this->data['test1'];  
    echo $this->data['test2'];  
  }
}
/* End of file test.php*/
/* Location: */

1 Ответ

1 голос
/ 02 апреля 2011

Ошибка в вашем коде.Когда вы __construct() класс, $this->data равен array().Пустой массив.Единственная строка, которая должна работать, - последняя в вашей функции test1().

Удалите все операторы echo из index() и test1() и попробуйте это:

  function test2()
  {
      $this->index();
      $this->test1();
      echo 'The data array contains these two entries:<br />';
      echo $this->data['test1'];  
      echo $this->data['test2'];  
    }

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

Попробуйте определить их в вашем __construct, если вам нужен доступ к ним в каждом методе класса.

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