параметры — присваивают значение непосредственно в конструктор php с внешней функцией

Могу ли я присвоить свойству значение в конструкторе без определения какого-либо параметра, используя, например, внешнюю функцию?

пример

function my_external_function() {

return 'Good Morning World';

}

class MyClass {

protected $_my_property;

public function __construct() {

$this->_my_property = my_external_function() != '' ? my_external_function() : 'Good night World!';

}

public function getOtherMethod() {

return $this->_my_property;

}

}

$obj = new MyClass();
echo $obj->getOtherMethod();

1

Решение

Вы Можно сделай это. Код в вашем вопросе будет работать, но есть проблема с этим подходом.

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

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

class MyClass {

protected $_my_property = 'Good night World!';  // set a default value here

public function __construct($x = null) {  // give your constructor an optional argument
if ($x) {                             // use the optional argument if it's provided
$this->_my_property = $x;
}
}

public function getOtherMethod() {
return $this->_my_property;
}
}

Вы все еще можете создать экземпляр вашего класса без аргументов

$obj = new MyClass();

и когда вы звоните $obj->getOtherMethod(); вы получите значение по умолчанию.

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

$obj = new MyClass(my_external_function());
1

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

Да, но вам лучше избегать таких хитрых зависимостей.

1