Динамическое переключение результатов класса - PullRequest
0 голосов
/ 06 июня 2019

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

<?php
$agric = new Agriculture;
$newplant = $agric-> setClass('plant');
$newanimal = $agric->setClass('animal'); 

$agric->getAll(); // returns null

$newplant->setProperties($plant1_data); //uses plant
$newanimal->setProperties($animal1_data); // uses animal

$newplant->setProperties($plant2_data); //uses plant
$newanimal->setProperties($animal2_data); // uses animal

$newplant->getAll(); // returns all plants array
$newanimal->getAll(); // returns all animals array

$agric->getAll(); // returns both plants array and animals 
?>

Итак, в одной форме новые переменные вызывают setClass для работы, и каждый раз, когда он вызывается, они используют свой метод setClass, чтобы узнать, какой тип аргумента они должны использовать для запуска своего кода. Я знаю, что могу сделать это по-другому, но мне, кажется, нравится этот подход. Любая помощь подойдет. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

Спасибо @everyone .. Я наконец получил ответ на этот вопрос.Так что причина, по которой я отдаю это @Dragos, заключается в том, что телефонный завод кажется лучшим подходом к этому.Итак, все, что я сделал, это создал два класса.Одним из них является Сельское хозяйство, у которого есть метод для получения свойств того, что было вызвано с использованием «getAll ()», а другим является HandleAgric, который также имеет «getAll ()».HandleAgric имеет свой собственный setClass, который является статическим, и каждый раз, когда он вызывается, он создает новое Сельское хозяйство со своим параметром по умолчанию.Итак, оба класса будут иметь setClass () и getAll () в качестве метода.Примерно так

<?php
class HandleAgric{
    private static $Agriculture;

    public function __construct(){
        self::setClass();
     }

    function __call($method,$args){  
        $self = new self;
        if(method_exists($self::$Agriculture, $method)){
        $call = call_user_func(array($self::$Agriculture, $method));
        return $call;      
    }
    return trigger_error("Error Found!!! Aborting");
    }

    public static function setClass($class=null){
        self::$Agriculture = new Agriculture;
        $call = self::$Agriculture->setClass($class);
        return $call; 
    }
}


    //Example of usage

    $Agric  = new HandleAgric();
    $Plant  = $Agric::setClass("plant");
    $Animal = $Agric::setClass("animal"); 

    $Plant->setProperties($arrayList);   
    $Animal->setProperties($arrayList);

    @ $Plant->getAll() //return plants properties in array;

    @ $Animal->getAll() //return Animal properties in array;

    @ $Agric->getAll() //return Agric (both plant and animal) properties in array;

?>

Я считаю, что это намного лучше.

0 голосов
/ 06 июня 2019

Чтобы ваш пример работал, метод setClass из сельского хозяйства должен работать как фабрика: он создает класс на основе параметра и возвращает объект.

Класс сельского хозяйства также должен хранить все объекты, созданные в методе setClass, в своем собственном внутреннем массиве, поэтому при вызове метода getAll он выполняет итерацию по каждому объекту и выполняет свои собственные методы getAll.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...