2016-09-29 5 views
-4
class User { 

    public $name; 

    public function __construct($name) { 
    $this->name = $name; 
    } 

    public function sayHi() { 
    echo "Hi, I am $this->name!"; 
    } 
} 

Может кто-нибудь объяснить мне слово за словом, что понимается под $ this-> name = $ name? Я продолжаю думать, как, $ это входит в (следовательно, -> знак) имя, которое является (следовательно, = знак) $ name определено заранее. Также я не вижу необходимости в этой функции?

Может просто идти, как это:

class User { 

    public $name; 

    public function sayHi() { 
    echo "Hi, I am $name!"; 
    } 
} 

Я из идеи думать об этом .. спасибо заранее.

+3

'$ this-> name' относится к свойству класса' $ name'. '$ name', параметр' __construct' является просто переменной. Таким образом, вы присваиваете параметру '__construct'' $ name' свойству класса '$ name'. '$ this' относится к текущему классу. Обратите внимание, что параметр '__construct'' $ name' мог иметь любое другое имя, опять же, это просто параметр или простая переменная, где в качестве '$ this-> name' относится к имени свойства класса. [Читать дальше] (http://php.net/manual/ro/language.oop5.properties.php) – Andrew

+0

Спасибо, миллион! вау это действительно помогает прояснить мое понимание. Еще раз спасибо –

ответ

0

Когда вы создаете новый экземпляр класса User с параметром $name__construct, по $this->name она устанавливается на $name свойства класса. В вашем втором примере $name не получает никакого значения, потому что вы нигде не присваиваете ему никакого значения.

Вы также мог бы его, как это для лучшего понимания:.

class User { 

    public $nameProperty; 

    public function __construct($name) { 
    $this->nameProperty = $name; 
    } 

    public function sayHi() { 
    echo "Hi, I am $this->nameProperty!"; 
    } 
} 

$this относится к классу вы в настоящее время Итак, когда вы создаете новый класс User, вы можете передать имя, используя $name параметр. Затем этот параметр присваивается $nameProperty, а в вашем методе sayHi() вы должны повторить назначенное имя.

+0

Спасибо, очень помогает alot :) –

0
class User { 

    public $name; //declare a public property 

    public function __construct($name) { 
     $this->name = $name; 
    /* at the time of object creation u have to send the value & that value will be store into a public property which will be available through out the class. like $obj = new User('Harry'); Now this will be set in $this->name & it is available inside any method without declaration. 

    */ 
    } 

    public function sayHi() { 
    echo "Hi, I am $this->name!"; //$this->name is available here 
    } 
} 
0

В контексте метода класса, когда вы хотите получить доступ к свойствам класса, вы должны использовать $ this-> свойство. Без $ this вы фактически получаете доступ к переменной в объеме метода, который в вашем случае является параметром $ name.

Функция __construct() является конструктор для объекта класса. Поэтому, если вы создадите экземпляр объекта, вы должны выполнить код внутри конструктора. Пример:

$user = new User("John"); // you are actually calling the __construct method here 
echo $user->name; // John 

Надеюсь, что просветит вас.

+0

Спасибо! Я действительно интересовался этим тоже Rax !. еще раз спасибо –