условные обозначения — PHP Позволяет функции устанавливать переменную-член ИЛИ возвращать результат

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

Предположим, у нас есть класс

class Test
{
private $value;

function first()
{
if("this"=="that") {
$neededVariable = 1;
}
}
function second()
{
$this->first();
//I need to evaluate something that was done in function first
if($neededVariable===1) {
//do something
}
}

Теперь, что было бы лучше всего делать? Насколько я могу сказать, есть два варианта:

  1. Пусть first() Функция устанавливает переменную-член с помощью $this->value = 1; и получить доступ к этой переменной с помощью second() функция.

2. first() функция может вернуться $neededVariable,

Они оба дают одинаковый результат, но мне интересно, есть ли лучшая практика. Может быть, один имеет лучшую производительность, чем другой, или просто потому, что принято использовать вариант 1/2.

Любые ответы очень ценятся!

Заранее спасибо 🙂

0

Решение

Сохранение результата first в $ означает изменение состояния объекта. Использование этого просто для передачи результата — плохой дизайн, поскольку читатель вашего кода предположит, что изменение состояния объекта имеет более глубокое значение. Хуже того, вызов second () также изменил бы состояние объекта так же, как first () — это то, чего ожидает пользователь вашего кода?

Если изменение состояния объекта является Целевое назначение of first (), и пользователю будет ясно, что second () будет иметь тот же эффект, тогда установка $ this-> value в first () и вызов first () в second () — хороший дизайн.

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

class Test
{
private $value;

private function evaluate() {
$neededVariable = 0;
if ("this"=="that") {
$neededVariable = 1
}
return $neededVariable;
}

function first()
{
$this->value = $this->evaluate();
}

function second()
{
$neededVariable = $this->evaluate();
if($neededVariable===1) {
//do something
}
}
}
0

Другие решения

Я думаю, что № 1 лучше.

Потому что если вы используете no.2, каждый раз, когда вы вызываете second (), first () также будет вызываться в func second. (Плохо для процессора, когда first нуждается в интенсивном использовании процессора)

Но у №2 есть и хорошие вещи. каждый раз, когда вы хотите использовать func second, вы должны были вызывать func first, если только $ value не будет нулевым. Это плохо, если вы хотите использовать этот класс на разных страницах.

1

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

    class Test
{
private $value;

function first()
{
if("this"=="that") {
$neededVariable = 1;
}
return $neededVariable;
}
function second()
{
//either you create a variable or use directly the function in if..
//both will require that temporary memory block.
$var = $this->first();  //or if($this->first() == 1)
if($var ===1) {
//do something
}

}
0
По вопросам рекламы [email protected]