В чем разница в этом способе вызова метода - PullRequest
0 голосов
/ 22 ноября 2018

Как я понял, в первом примере объект создан, а во втором я не вижу созданного объекта.Я пытаюсь понять, в чем разница между двумя способами вызова метода:

<?php

class Animal{

    public $voice;

    public function speak($sound){
        echo $this->voice = $sound;
    }

}

// Example 1

$tiger = new Animal();
$tiger->speak('Roar');

// Example 2

(new Animal)->speak("Cloak Cloak");

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

В первом примере вы назначаете переменную $ 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();

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

0 голосов
/ 22 ноября 2018

Всякий раз, когда вы используете «new», вы создаете экземпляр объекта (он может быть временным).Разница в вашем коде заключается в том, что в первом примере вы сохраняете экземпляр в «$ tiger», поэтому он сохраняется, но во втором примере вы только создаете экземпляр временного объекта для вызова метода.

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