2014-02-19 4 views
0
class Auth extends Controller { 

    function __constructor(){ 
     private $pass; 
    } 
    function Auth() 
    { 
     parent::Controller(); 
     $this->load->library('session'); 
     $this->load->helper('cookie'); 
     $this->load->library('email'); 
    } 
    function index(){ 
      .......... 
    } 
    function loging(){ 
       $this->pass = "Hello World"; 
    } 
    function test(){ 
       var_dump($this->pass); // this is on the line 114 
    } 
} 

Когда я получить доступ к тестовой функции я получаю эту ошибку:Как объявить глобальную переменную в PHP класс

Parse error: syntax error, unexpected T_PRIVATE in /var/www/clients/client1/web15/web/application/controllers/auth.php on line 6

вместо строки «Hello World». Интересно, почему ? Кто-нибудь может мне с этим помочь ? Thx заранее

+2

объявить свойство класса ('частного $ пасс;') рядом методов не внутри них. Также '__constructor()' должен быть '__construct()'. –

+0

Идея такова: как я могу обновить закрытую переменную в функции и получить доступ к обновленному значению в другой функции, конечно же, в том же классе – Chester

+1

. Тогда ответ @ Rob выглядит хорошо для меня. –

ответ

1

Во-первых, вы «Не пытайтесь создать« глобальную переменную »(как указывает ваш заголовок), а частная переменная-член.

Для этого вам необходимо объявить переменный частный член вне конструктора:

class Auth extends Controller { 

    private $pass; 

    function __construct(){ 
    } 

    function auth() 
    { 
     parent::Controller(); 
     $this->load->library('session'); 
     $this->load->helper('cookie'); 
     $this->load->library('email'); 
    } 
    function index(){ 
      .......... 
    } 
    function loging(){ 
     $this->pass = "Hello World"; 
    } 
    function test(){ 
     echo $this->pass; 
    } 
} 

также:

  • Исправьте имя вашего конструктора
  • Выберите именование (например, строчный первый символ имен функций) и придерживаться его.

Как тривиальный ответ/пример того, что вы просите. Попробуйте это:

<?php 

    class Auth { 

     private $pass; 

     function __construct(){ 
     } 

     function loging(){ 
      $this->pass = "Hello World"; 
     } 
     function test(){ 
      echo $this->pass; 
     } 
    } 

    $oAuth = new Auth(); 
    $oAuth->loging(); 
    $oAuth->test(); 

?> 

Он выводит:

C:\>php test.php 
Hello World 
+0

Теперь я получаю эту ошибку: Неустранимая ошибка: не удается получить доступ к пустому свойству в /var/www/clients/client1/web15/web/application/controllers/auth.php в строке 114 – Chester

+0

Я изменил его значение на «Hello World».Я не знаю, почему я получаю эту ошибку. – Chester

+0

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

0

Как это:

class Example extends CI_Controller 
{ 

    public $variable = "I am Global"; 

    public function test() 
    { 
    echo $this->variable; // I am Global 
    } 

    public function demo() 
    { 
    echo $this->variable; // I am Global 
    } 

} 

Или в вашем случае сделать переменную $passpublic вместо private

public $pass;//<==make change here 

и использовать переменную, используя $this

+0

, но что происходит, когда я модифицировал переменную $ this-> в тестовой функции, и я хочу напечатать ее измененную переменную в демо-функции? – Chester

+0

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

+0

Это не глобальный - это переменная открытого участника. Может показаться, что я педантичен, но различие очень важно, если вы хотите понять объектно-ориентированное развитие. –

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