Я только начинаю с объектно-ориентированного PHP, и у меня есть следующая проблема:
У меня есть класс, который содержит функцию, содержащую определенный скрипт. Мне нужно вызвать переменную, расположенную в этом скрипте, в другой функции далее в том же классе.
Например:
class helloWorld { function sayHello() { echo "Hello"; $var = "World"; } function sayWorld() { echo $var; } }
в приведенном выше примере я хочу вызвать $ var, который является переменной, которая была определена внутри предыдущей функции. Это не работает, так как я могу это сделать?
вы должны создать var в классе, а не в функции, потому что когда функция заканчивается, переменная будет отменена (из-за прекращения функции) …
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 } } ?>
Сделать $var
переменной класса:
class HelloWorld { var $var; function sayHello() { echo "Hello"; $this->var = "World"; } function sayWorld() { echo $this->var; } }
Я бы не стал глобальным, если только к нему не понадобилось много другого кода; если это просто что-то, что нужно использовать в одном классе, то это идеальный кандидат для члена класса.
Если ваш метод sayHello()
впоследствии вызывал sayWorld()
, альтернативой было бы передать аргумент этому методу.