PHP вопрос новичка;«Примечание: неопределенное свойство» - PullRequest
3 голосов
/ 06 апреля 2011

Я использую следующий код:

class Foo {  
    private $var = 0;

    function isVarSet () {
           return ($this->var != 0);
    }
}

...

foo = new Foo();

приводит к уведомлению "неопределенное свойство": foo :: $ var в моем PHP (версия 5.3.5).

если я переписываю только функцию isVarSet ():

function isVarSet() {
    if (isset($this->var))
        return ($this->var != 0);
    return false;
}

уведомление исчезает.

Это я не понимаю.$ var устанавливается в обоих случаях, почему это будет неопределенное свойство?Почему мне нужно использовать isset () для предотвращения этого уведомления?Кроме того, почему уведомление ссылается на $ var с оператором области ::?Я не использую статический класс, я использую экземпляр foo.$ foo-> isVarSet () должен получить доступ к переменной $ var, которая определена и не является статичной.

Я работаю над этим часами и читаю все остальные ответы в уведомлении о неопределенном свойстве, но этоодин я просто не понимаю.Пожалуйста, просветите меня, мастера StackOverFlow.


код в моем приложении:

<?php

class session {

    private $userId = 0;

    function __construct() {
    session_start();
    $this->setUserId();
    }

    public function isLoggedIn() {
    //if (isset($this->userId))
        return ($this->userId != 0);
    //return false;
    }

    function getUserId() {
    if (isset($this->userId))
        return $this->userId;
    else
        return false;
    }

    private function setUserId() {
    if (isset($_SESSION['userId'])) {
        $this->userId = $_SESSION['userId'];        
    } else 
        unset($this->userId);       
    }

    public function login($user) {
    if ($user != null) {        
        $_SESSION['userId'] = $user->id;
        $this->userId = $user->id;
    }
    }

     public function logout() {
    unset($_SESSION['userId']);
    unset($this->userId);   
    }    
}

$session = new Session();

?>

Вызов в классе сеанса сделан так:

if ($session->isLoggedIn())
redirectToLocation("../public/index.php");

Ответы [ 3 ]

2 голосов
/ 06 апреля 2011

(после всего редактирования).

Как вы думаете, что делает эта строка (в setUserId):

 unset($this->userId);

Возможно, вы просто захотите установить ее на 0, как и в предыдущем(который вы признаете не авторизованным:

 $this->userId = 0;

или:

 $this->userId = null;

Выберите.

0 голосов
/ 06 апреля 2011

php 5.3.5 / windows

<?php

  function eh($errno, $errstr) {
    echo "[$errno] $errstr";
    }

  set_error_handler('eh');

  class Foo {  
    private $var = 0;

    function isVarSet () {
      return ($this->var != 0);
      }

    public function testVar() {
      return var_export($this->isVarSet());
      }
    }

  $foo = new Foo();
  echo $foo->testVar();

?>

вывод:

false

для $var=1, вывод:

true

Так что это работаетотлично здесь.

0 голосов
/ 06 апреля 2011

Я думаю, это потому, что вы не инициализировали свою переменную в первом примере. Сначала вам нужно инициализировать переменную в вызываемом методе. Только тогда он инициализируется. Надеюсь, это поможет вам.

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