В PHP: Как вызвать переменную $ внутри одной функции, которая была ранее определена внутри другой функции? - PullRequest
3 голосов
/ 20 марта 2010

Я только начинаю с объектно-ориентированного PHP, и у меня возникает следующая проблема:

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

Например:

class helloWorld {

function sayHello() {
     echo "Hello";
     $var = "World";
}

function sayWorld() {
     echo $var;
}


}

в приведенном выше примере я хочу вызвать переменную $ var, которая была определена внутри предыдущей функции. Это не работает, так как я могу это сделать?

Ответы [ 2 ]

17 голосов
/ 20 марта 2010

вы должны создать переменную в классе, а не в функции, потому что по окончании функции переменная будет сброшена (из-за завершения функции) ...

class helloWorld {

private $var;

function sayHello() {
     echo "Hello";
     $this->var = "World";
}

function sayWorld() {
     echo $this->var;
}


}
?>

Если вы объявите переменную как public, она будет доступна напрямую всем остальным классам, тогда как если вы объявите переменную как private, она будет доступна только в том же классе ..

<?php
 Class First {
  private $a;
  public $b;

  public function create(){
    $this->a=1; //no problem
    $thia->b=2; //no problem
  }

  public function geta(){
    return $this->a;
  }
  private function getb(){
    return $this->b;
  }
 }

 Class Second{

  function test(){
    $a=new First; //create object $a that is a First Class.
    $a->create(); // call the public function create..
    echo $a->b; //ok in the class the var is public and it's accessible by everywhere
    echo $a->a; //problem in hte class the var is private
    echo $a->geta(); //ok the A value from class is get through the public function, the value $a in the class is not dicrectly accessible
    echo $a->getb(); //error the getb function is private and it's accessible only from inside the class
  }
}
?>
0 голосов
/ 20 марта 2010

Сделать $var переменную класса:

class HelloWorld {

    var $var;

    function sayHello() {
        echo "Hello";
        $this->var = "World";
    }

    function sayWorld() {
        echo $this->var;
    }

}

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

Если ваш метод sayHello() впоследствии вызывал sayWorld(), тогда альтернативой будет передатьаргумент этого метода.

...