Я уже знаю, как создать метод __construct()
в классе, который выполняется до того, как будет выполнена указанная вами функция, когда вы создадите экземпляр этого класса. Мой класс статичен со многими методами - все статическими.Как создать contructor для статического метода в классе PHP
То, что я хотел бы достичь, - создать метод, который всегда выполняется при вызове статического метода. Целью этого является то, что я хотел бы создать одноэлементный класс путем принудительного ввода экземпляра другого класса в статическое свойство и использования статического свойства для доступа ко всем его методам.
<?php
class ArrayObject {
private $input_array;
private $output_array;
//this method removes elements with null values
public function clean(array $array)
{
#...code to remove empty value elements
//set the value of the output to the output array
$this->output_array = $result;
}
//this method strips whitespace from array element
public function trim(array $array)
{
#...code to remove whitespace
//set the value of the output to the output array
$this->output_array = $result;
}
//this method returns the value of the $output_array
public function getOutput()
{
return $this->output_array;
}
}
Выше класса объектов, которые должны быть введены в статический класс в качестве зависимости. Ниже статический класс для реализации этого ArrayObject
<?php
class ArrayClass {
private static $arrayObject;
//this method sets the value of the $arrayObject
private static function setArrayObject()
{
self::$arrayObject = new ArrayObject();
}
//this method removes elements with null values
public static function clean(array $array = null)
{
#...call method to remove empty value elements
self::$arrayObject->clean($array);
return new static;
}
//this method strips whitespace from array elements
public static function trim(array $array = null)
{
#...call method to remove whitespace
self::$arrayObject->trim($array);
return new static;
}
//this method returns the value of the $output_array
public static function get()
{
return self::$arayObject->getOutput();
}
}
причина, почему я делаю это так, что я в состоянии методов цепи в этой манере ArrayClass::clean($array)->trim()->get();
.
Вы можете сказать, но почему бы не сделать все это в статическом классе вместо создания отдельного объекта для этого - причина, по которой мне нужно создать два класса, - это то, что я хотел бы, чтобы один класс обрабатывал операции массива и другой - для получения параметров массива в цепочке, чтобы я четко отделял логику.
Посмотрите, что для каждого метода требуется допустимый массив. То, что я хотел бы сделать со статическим классом, - проверить нулевое значение, переданное в цепочном вызове. Если вызов метода пуст, статический класс примет выходной массив из предыдущего вызова и отправит его как input_array ко второму прикованному вызову, так что, когда вы хотите выполнять операции с цепочкой, вы передаете этот параметр только первому вызову метода.
Теперь, надеясь, что вы все это поняли, мой вопрос: как я могу установить public static function setArrayObject()
, чтобы всегда выполняться при каждом вызове любого метода операций массива в любом порядке? - без необходимости сначала вызвать этот метод внутри каждого из статических методов? И без пользователя весь будет использовать этот класс, чтобы сначала создать экземпляр вручную, прежде чем обращаться к этой функции?
Я хотел бы, чтобы этот класс был полностью статичным с точки зрения пользователя.
Что вы ожидаете, будет возвращено 'return new static;'? –
'return new static' возвращает' instance' статического класса, чтобы включить статическое связывание методов. Но не то же самое, что и экземпляр, когда мы используем ключевое слово 'new'. Это эквивалент 'return $ this' в объекте – geoffreybans
Нет термина' статический класс'. Существует «статический метод», который вызывается без экземпляра класса. –