Метод класса PHP, когда возвращать или не возвращать

Внутри класса я создал метод set, если он называется, который принимает данные.

    <?php
public function set_name($name)
{
$this->name = ucwords(trim($name));
// return $this->name;
}
?>

У меня вопрос, должен ли я возвращать результат функции или нет необходимости. Если нет, то почему? Я знаю, что в методе display () вы должны возвращать так: return $ this-> name ;. Я действительно смущен.

0

Решение

Вам не нужно ничего возвращать.

Однако рекомендуется возвращать что-то в определенные функции для выполнения тестов, даже если это просто true или false, чтобы выяснить, правильно ли выполнялась функция.

Учитывая ваш код, как правило, я лично не устанавливаю возврат на сеттеры. Так что нормально ничего не возвращать.

Например, вы можете проверить, что ваше имя содержит только буквы, и вернуть false, если это не так

<?php
public function set_name($name) {
if(preg_match("/[A-Za-z]+/", $name) {
$this->name = ucwords(trim($name));
return true;
} else {
return false;
}

}
?>

Тогда вы бы назвали это:

<?php
if(!set_name($name)) {
echo "There was an error";
}
?>

Однако это не соответствует фреймворку MVC.

1

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

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

0

Вы не ДОЛЖНЫ возвращать результат в функцию установки, лучше всего использовать некоторые функции получения для получения данных.

В противном случае моя точка зрения с сеттером — вернуть $ this. С помощью этого небольшого трюка вы можете объединить функции сеттера.

Например :

class C
{
private $arg;
private $arg2;

function setArg($NewArg)
{
// your tests or so
$this->arg = $NewArg;
return $this;
}

function setArg2($NewArg)
{
// your tests or so
$this->arg2 = $NewArg;
return $this;
}

function getArg()
{
return $this->arg;
}

function getArg2()
{
return $this->arg2;
}
}

И вы можете использовать это так:

$Item = new C();
$Item->setArg('hello')
->setArg2('hi');

$Item->getArg(); // return 'hello'
$Item->getArg2(); // return 'hi'
0

Это более семантически в этом случае. Ожидаю ли я функцию с именем set_name дать мне имя? Нет, не совсем, это звучит глупо. В этом случае я бы ничего не вернул.

Поскольку функция должна выполнять только одно, вы всегда должны иметь возможность сократить выбор до двоичного «да, я бы ожидал, что он что-то вернет» или «нет, это не имеет никакого смысла».

0

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

Всегда полезно поставить себя на место программиста, который должен работать с вашим кодом. Если бы пришлось использовать метод с именем: set_name() он никогда не ожидал бы, что это что-то вернет.

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

Если вы примените это на практике: поздравляю. Вы только что создали себе отличный и надежный будильник для методы, которые делают слишком много (разделение проблем) и вы на шаг ближе к чистому дизайну программного обеспечения.

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

0