в попытке улучшить мое понимание ООП, я решил реорганизовать часть своего кода, используя абстрактный класс. Идея примерно такая;PHP Pass экземпляр объекта для абстрактного конструктора классов
- Один абстрактный «родительский» класс, который формирует базу для всех дочерних классов.
- Один класс «помощник», который имеет ряд методов, которые потребуются детям абстрактного класса.
- класс «помощник» будет использоваться другими классами, поэтому я не хочу, чтобы это было неотъемлемой частью абстрактного класса.
Проблема;
Класс child расширяет абстрактный класс по назначению, но PHP дает мне предупреждение о том, что аргумент $helper
отсутствует в конструкторе абстрактного класса. Я считаю, что конструктор вызван, потому что в моем дочернем классе нет ни одного, это нормально, но поскольку вы не вызываете прямой вызов абстрактного класса, как мне заставить его работать? Пример кода ниже;
abstract class Parent_Abstract
{
public $input_helper_methods;
public function __construct($helpers = NULL)
{
//set the helper methods
$this->input_helper_methods = $helpers;
}
}
Переменная $helpers
находится в другом файле в тот момент, который входит в верхней части файла с абстрактным классом. Опять же, я думаю, что есть проблема с тем, как это делается. Когда я понимаю структуру, я хотел бы использовать автозагрузчик, но пока просто ручная работа была бы хорошей. Это содержимое этого файла;
class RD_Form_Input_Helper_Methods
{
private $var = 'something';
}
$helpers = new RD_Form_Input_Helper_Methods;
Надеюсь, это имеет смысл. Спасибо, что нашли время, чтобы прочитать/ответить.
Другой пример;
//"helper" classes. I would like these methods to be available to Child_One and Child_Two
class Helper_Functions {}
class Formatting_Functions {}
abstract class Parent_Abstract()
{
private $helper_functions;
private $formatting_functions;
public function __construct($object_one, object_two)
{
$this->helper_functions = $object_one;
$this->helper_functions = $object_two;
}
}
class Child_One extends Parent_Abstract
{
//I can use any of the properties or methods from the Helper_Functions or Formatting_Function class
}
class Child_Two extends Parent_Abstract
{
//I can use any of the properties or methods from the Helper_Functions or Formatting_Function class
}
Nope. Я видел ваш ответ в ответе ниже и ответил там. – Dan