В первом примере вы назначаете переменную $ tiger как новый объект, с помощью которого вы можете затем вызывать функции и переменные, связанные с этим объектом, ссылаясь на $ tiger.
т.е. как Tiger nowравняется объекту класса Animal, он может говорить.
Однако во втором примере вы все еще создаете новый объект класса Animal и, как таковой, он может говорить - но вы не присвоили его переменной,Поэтому вы больше не можете ссылаться на этот же объект.
Итак, в первом примере, если бы мы хотели назвать нашего $ tiger, мы могли бы сделать так, чтобы класс выглядел примерно так.
class Animal{
public $voice;
public $name = "I have no name.";
public function speak($sound){
echo $this->voice = $sound;
}
public function sayYourName(){
echo $this->name;
}
}
Теперь, если мы скажем,
$tiger = new Animal();
$tiger->speak('Roar');
$tiger->name = "Rory";
$tiger->sayYourName(); // This will echo "Rory"
Однако, если вы попробуете второй пример:
(new Animal)->sayYourName(); // This will echo "I have no name."
Так что, если вы скажете:
(new Animal)->name = "Rory";
(new Animal)->sayYourName(); // This will still echo "I have no name".
Это потому, чтомы не присвоили ссылку на новое животное, поэтому, хотя мы можем получить доступ к методам функции и даже к предопределенным переменным, мы не сможем затем ссылаться на них позже.
Чтобы сделать это, мы должныпридерживайтесь первого метода (т. е. ссылки)
$tiger = new Animal();
$tiger->name = "Rory";
$tiger->sayYourName();
В заключение, используйте ссылку для ссылки на объект позже.то есть, чтобы привлечь внимание животных, вы должны назвать его по имени.