Можно ли в классах методом __toString() вернуть null?

Статус
В этой теме нельзя размещать новые ответы.

StalkerClasses

Новичок
Код:
class myclass {
    /**
     * @return string|null
     */
    public function __toString()
    {
        if($this->value === null){
            return ''; // почему здесь нельзя вернуть null?
        }
        return $this->value;
    }
}
 

WMix

герр M:)ller
Партнер клуба
в базе null а в __toSting() только string

не нравится пустая строка напиши что нить
Код:
if($this->value === null){
  return 'тута пусто';
}
 

StalkerClasses

Новичок
в базе null а в __toSting() только string

не нравится пустая строка напиши что нить
Код:
if($this->value === null){
  return 'тута пусто';
}
Не пойму - у меня есть класс с конструктором. Как мне вернуть значение если я не использую методов?

$row->image = new FileUploadService(field, defvalue, savepath);

Мне получается в конструкторе надо делать return?
 

StalkerClasses

Новичок
Class A
{

private $msg;

public function __construct($msg)
{
$this->msg = $msg;
}

public function getMsg()
{
return 'Hello, ' . $this->msg;
}

}


$msg = (new A('World!'))->getMsg();

echo $msg; // выведет Hello, World!

Судя по всему только так
 

WMix

герр M:)ller
Партнер клуба
вариантов то не много,
1. сделать property публичным
2. добавить магический __get
3. превратить в array или json а после в array
4. использовать метод
5. reflection
 

StalkerClasses

Новичок
А когда класс внедряется в класс как DInject можно ли в конструктор передавать значения? Или нужен метод?

$this->djClass->метод()

Можно ли в сам djClass как то передать параметры
 

WMix

герр M:)ller
Партнер клуба
не очень понимаю,
DInject это типо new A(new B)
если а общается с б то вероятно на уровне метода или лучше интерфейса
 

WMix

герр M:)ller
Партнер клуба
я не знаю что ты делаешь, но "нужен метод" чаще всего правильный ответ, но и public и reflection тоже используют
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
какое-то сплошное ламерство

1. поле в бд и поле объекта - разные вещи, и да, в базе null здесь уместен
2. "напиши что нить", а по факту магическую строковую константу - это плохой совет, так нельзя делать
3. "$row->image =" писать плохо, нарушает solid
4. добавлять магический __get - плохо, нарушает solid
5. превратить в array или json а после в array - еще хуже, бред какой-то
6. reflection - это здесь просто чтобы умное слово написать?
7. работать с null можно и без приведения к строке
8. это что, сама картинка в базе хранится, или все-таки имя файла?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
задача с базой решается двумя классами - value object для данных из базы, и модель для доступа к ним
PHP:
final class imageData {
  public int $id;
  public ?string $image;
}

final class image {
  private imageData $imageData;
  public function getImage():?string
}
надо ли из getImage() возвращать null, зависит от дальнейшей логики,
когда в модели есть метод getImage() - можно добавить и синтаксический сахар вроде магического __get($key), только непонятно зачем

вопросы обсуждались лет 10, и продолжаете обсуждать это ... вы что, телевизор смотрите как профилактику от интеллекта?
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
и зачем тут отдельно "модель для доступа", что тебе мешало public function getImage():?string прям в твоем "value object" вписать?
да и не value object это а entity, тк явно идентичность просматривается
 

Squats

Новичок
АЖНО два класса.
Эх руки бы поотрывал за такой код!
Говно Классер <матное слово>
 

WMix

герр M:)ller
Партнер клуба
ну так себе, идея понятная, но смешал все в кучу, да и GUI странное
тебе уже на уровне запроса нужно знать что делать (загружать или удалять) тогда ты сможешь вызвать правильный controller
ты же лепишь эту проверку в сервисе.

Серсисы должны быть stateless у тебя в нем хранятся данные

Storage::disk('public') очень не красивая конструкция
если это зависимость сервиса, то пишут явно
new FilePublicAttachOrDetachService(Storage::disk('public'), ...);
а после $this->storage->putFile($this->savePath, $file);

слову Request тоже в сервисе делать нечего, это тоже слово из мира controller

ну это так глазками пробежался, там и к if/else можно придраться, но изначально деление на ответственности странное
 

StalkerClasses

Новичок
А не боишься что Галочка может стукнуть в ответ?
Не понял что значит может стукнуть?
ну так себе, идея понятная, но смешал все в кучу, да и GUI странное
тебе уже на уровне запроса нужно знать что делать (загружать или удалять) тогда ты сможешь вызвать правильный controller
ты же лепишь эту проверку в сервисе.

Серсисы должны быть stateless у тебя в нем хранятся данные

Storage::disk('public') очень не красивая конструкция
если это зависимость сервиса, то пишут явно
new FilePublicAttachOrDetachService(Storage::disk('public'), ...);
а после $this->storage->putFile($this->savePath, $file);

слову Request тоже в сервисе делать нечего, это тоже слово из мира controller

ну это так глазками пробежался, там и к if/else можно придраться, но изначально деление на ответственности странное
1 сервис решает 1 проблему. Зависимость внутри это внутренняя зависимость.

Сервис отрабатывает входящие данные

Если ничего вернёт значение по умолчанию

Если есть загрузка файла - вернёт путь к загружённому файлу

Если отмечена галочка удалить - этот файла пропадём из значения по умолчанию
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху