Как я могу объявить свойство внутри метода? - PullRequest
2 голосов
/ 27 декабря 2011

Я совершенно новичок в написании классов на PHP, начался пару дней назад.

Я хотел бы объявить новое "открытое свойство" внутри метода, которое будет использоваться в других методах.

Это то, что я подумал (конечно, это не работает!):

    class hello {

        public function b() {
            public $c = 20; //I'd like to make $c usable by the method output() 
        }

        public function output() {
            echo $c;
        }
    }

$new = new hello;
$new->output();

Заранее благодарим за любые советы.

Ответы [ 8 ]

6 голосов
/ 27 декабря 2011

Я бы хотел объявить новое "публичное свойство" внутри метода для использования в других методах.

Если другие методы являются частью того же класса, вы не можетене нужна государственная собственность, частная собственность будет соответствовать вашим потребностям.Закрытые свойства доступны только в одном классе, что помогает упростить процесс.

Также следует понимать разницу между объявлением свойства и присвоением значения ему.Объявление делается, когда код загружен, присваивается, когда он выполняется.Поэтому для объявления (или определения) свойства (частного или общедоступного) требуется специальное место в синтаксисе PHP, которое находится в теле вашего класса, а не внутри функции.

Доступ к свойствам внутри класса осуществляется с помощьюиспользуя специальную переменную $this в PHP.

Псевдопеременная $this доступна, когда метод вызывается из контекста объекта.$this - это ссылка на вызывающий объект (обычно это объект, которому принадлежит метод [to]). Из PHP Manual

Пример частной собственности:

class hello {
    private $c; # properties defined like this have the value NULL by default

    public function b() {
        $this->c = 20; # assign the value 20 to private property $c
    }

    public function output() {
        echo $this->c; # access private property $c
    }
}

$new = new hello;
$new->output(); # NULL
$new->b();
$new->output(); # 20

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

2 голосов
/ 27 декабря 2011

Попробуйте вместо этого:

class hello {

    public $c = null;

    public function b() {
        $this->c = 20; //I'd like to make $c usable by the method output() 
    }

    public function output() {
        echo $this->c;
    }
}
2 голосов
/ 27 декабря 2011

Каждая переменная класса является публичной, когда вы определяете ее внутри метода (функции)! Вы можете сделать это следующим образом:

class hello {

    public function b() {
         $this->c = 20; 
    }

    public function output() {
        echo $this->c;
    }
}

$new = new hello;
$new->output();

или пусть функция b() возвращает $c, а затем передает ее в качестве переменной output():

class hello {

    public function b() {
         return $c = 20; 
    }

    public function output($c) {
        echo $c;
    }
}

$new = new hello;
$c = $new->b();
$new->output($c);

Помните, что все переменные внутри функции доступны ТОЛЬКО из этой конкретной функции ... если, конечно, вы не используете $this, что делает переменную свойством класса! Кроме того, рекомендуется только return переменные ... echo только для реального вывода, чистого HTML, шаблона, вашего представления, если вы понимаете, что я имею в виду:)

1 голос
/ 27 декабря 2011

Примечание: Если вам нужно использовать свойство в другом методе, вам не нужно объявлять этот метод как открытый, вы должны объявить свойство как частное, и у вас будет доступ к вашему свойству без проблем:

class hello {  
    private $c;  
    public function b() {  
        $this->c = 20;  
    }  
    public function output() {
        $this->c;
    }  
}  
1 голос
/ 27 декабря 2011
class hello {
    public $c;
    public function b() {
        $this->c = 20;
    }

    public function output() {
        $this->c;
    }
}
0 голосов
/ 27 декабря 2011

Перепишите этот код так: -

  class hello {

       public $c;
        public function b() {
            public $this->c = 20; //I'd like to make $c usable by the method output() 
        }

        public function output() {
            echo $this->c;
        }
    }

$new = new hello;
$new->output();
0 голосов
/ 27 декабря 2011
class hello {
        var $c;

        function __construct() { // __construct is called when creating a new instance
            $this->c = 20;
        }

        public function getC() {
            return $this->c; 
            // beter to return a value this way you can later decide what to do with the value without modifying the class
        }
    }

$new = new hello; // create new instance and thus call __construct().
echo $new->getC(); // echo the value
0 голосов
/ 27 декабря 2011
class hello {
 public $c;
        public function b() {
            $this->c = 20; //I'd like to make $c usable by the method output() 
        }

        public function output() {
            return $this->c;
        }
    }
$new = new hello;
echo $new->output();

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