2011-12-27 3 views
2

Я полностью новичок в классе, пишущий на 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(); 

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

+1

Простой, 'class hello {public $ property; } ' – Usman

ответ

5

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

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

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

Вы получаете доступ к свойствам внутри класса с помощью специальной переменной $this в PHP.

Псевдо-переменная $this доступна, когда метод вызывается из контекста объекта. $this - ссылка на вызывающий объект (обычно объект, которому принадлежит метод [to]). From 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 

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

+0

Благодарим вас за ответ! Внимательно оцените ваши усилия. – KingBOB

1

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

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 переменных ... эхо только для реального производства, чистый HTML, шаблон, на ваш взгляд, если вы знаете, что я имею в виду :)

+0

Спасибо! И извините за глупый вопрос! – KingBOB

2

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

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; 
    } 
} 
+1

Вам не нужно указывать значение «null». – Dimme

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

    public function output() { 
     $this->c; 
    } 
} 
0
 
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(); 

0
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 
1

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

class hello { 
    private $c; 
    public function b() { 
     $this->c = 20; 
    } 
    public function output() { 
     $this->c; 
    } 
} 
+0

+1 для указания, что частная собственность должна это сделать. – hakre

0

Rewrite этот код, как это: -

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

это не сработает! функция b никогда не вызывается, поэтому выход будет NULL – FLY

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