Задать вопрос
Maksclub
@Maksclub
maksfedorov.ru

Не всегда же называть методы глаголами?

Пишу тест на PHP и в нем придумываю, как мне нужно строить объект, пример:
<?php
$myObj = new MyClass;
$my = $myObj->build(SomeClass $obj, AnotherClass $obj2)
            ->event(new OtherEvent)
            ->property(new Property)
            ->date(date());


Понял, что тут некоторые методы будут называться существительным по названию свойства, то есть существительным
верна такая практика?

UPD: Именно вопрос и состоит в том, что тут же логично убрать set или в названии вспомогательных методов, так как по сути они олицетворяют свойство, которое мы задаем

Пример из фреймворка Yii2 на языке PHP:
5a7958354cb9a149766090.png

тут функции all() и alias()
существительные
5a79589e03a23764282464.png
  • Вопрос задан
  • 285 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 6
qonand
@qonand
Software Engineer
судя по всему у Вас методы устанавливают значения соответствующих свойств.
Для таких методов принято формировать названия с префиксом set, например: setEvent (установить событие), setDate(установить дату)

Что касается приведенного фрагмента: это базовый класс Yii фреймворка, а сам по себе код этого фреймворка желает лучшего, с точки зрения соответствия различным практикам программирования. Давайте забудем что это за фреймворк, забудем все что описано в документации по нему, и посмотрим на этот код просто с точки зрения ООП, глазами человека не привязанного к какому-то конкретному инструменту. Например, возьмем метод alias(). Что мы можем сказать о этом методе? Мы можем сказать что в этом методе что-то делается с псевдонимом. Но что конкретно делает этот метод? за что он отвечает? Исходя из его названия - мы ничего о этом сказать не можем, т.к. такое название неочевидно.
Ответ написан
GavriKos
@GavriKos
Называйте их SetDate и GetDate в зависимости от того, что они делают.
Ответ написан
Комментировать
Когда вы пользуетесь fluent interface - вы всегда создаёте маленький язык внутри другого языка. Поэтому нет ничего странного в том, что вам хочется вспомогательные конструкции называть по иным правилам.
Ответ написан
Комментировать
@BashkaMen
C# программист
Лучше первый метод назвать что-то типо Create - создать, а в конце уже место Build - построить.
Методам лучше сделать приставку Set - потому как они устанавливают значения
Ответ написан
Комментировать
mashletov
@mashletov
Math.random()
Глагол всегда должен быть, я считаю.
1) глагол + существительное: getDate, setName
2) просто глагол — update, build, create, make, get

Просто существительные можно использовать в атрибутах, а-ля ActiveRecord.
$x->name = 'asd'; Но никак не в виде метода.
Ответ написан
Комментировать
Minifets
@Minifets
Hello world!!!
Мой вариант.

Либо так:

interface Entity {

    /**
     * Property setter
     *
     * @param string $name Set property
     *
     * @return Entity (return $this;)
     */
    public function setName(string $name): Entity;

    /**
     * Property getter
     *
     * @param null|string $default Default value of property
     *
     * @return string Property value
     */
    public function getName(?string $default = null): string;
}


Либо так:

interface Entity {

    /**
     * Property setter and getter in one method
     *
     * @param null|string $name Set property value or get on $name = null
     *
     * @return Entity|string
     */
    public function name(?string $name = null);
}


Причем для 2-ого варианта желательно реализовать еще и магические методы __set и __get
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
26 дек. 2024, в 14:50
2000 руб./за проект
26 дек. 2024, в 14:40
15000 руб./за проект
26 дек. 2024, в 14:27
100000 руб./за проект