2016-05-19 3 views
1
class Human{ 
    private $name = 'Foobar'; 
    private $nick_name = 'King Foobar'; 
} 

Я хочу написать это следующим образом;Повторное использование переменной класса php

class Human{ 
    private $name = 'Foobar'; 
    private $nick_name = 'King '.$this->name; // doesn't work, ignore the . error 
    private $nick_name = 'King '.$name; // doesn't work, ignore the . error 
} 

Однако PHP жалуется. Есть ли способ обойти это?
Я знаю, что это возможно в Python

class Human: 
     name = 'Foobar' 
     nick_name = 'King '+name 

a = Human() 
print(a.nick_name) 

ответ

6

Вы не можете сделать $this->name, как вы заявляете, потому что $this еще не инициализирован.

Однако вы можете сделать это в конструкторе, чтобы достичь того, чего хотите.

class Human{ 
    private $name; 
    private $nick_name; 

    public function __construct(){ 
     $this->name = "Foobar"; 
     $this->nick_name = "King " . $this->name; 
    } 
} 

Можно также добавить дополнительные параметры для конструктора, если вы хотите ...

public function __construct($name = "Foobar", $nickname = NULL){ 
    $this->name = $name; 

    // If the nickname is null, it will be King and the name 
    // Otherwise it will be the nickname passed in the parameter 
    $this->nick_name = $nickname ? $nickname : ("King " . $this->name); 
} 

Результат будет выглядеть так:

$humanA = new Human(); // Name: Foobar && Nickname: King Foobar 
$humanB = new Human('MyName'); // Name: MyName && Nickname: King MyName 
$humanC = new Human('MyName', 'MyNickname'); // Name: MyName && Nickname: MyNickname 
Смежные вопросы