создать класс программно из файлов и текущего класса или в новом - PullRequest
0 голосов
/ 15 марта 2019

A. у меня есть это несколько файлов с методами внутри него, как это:

file1.php
    <?php
    function Example1() {
        echo 'Example1';
    }
    function Example2() {
        echo 'Example1';
    }
    ?>

B. и это другое:

file2.php
    <?php
    function Example3() {
        echo 'Example1';
    }
    function Example4() {
        echo 'Example1';
    }
    ?>

C. и я хочу связать это с классом, но мне нужно сделать это программно:

class Class_Example {
    public function ChargeFunction() {
        $DirectoryToScan ='/functionsfiles/'
        $ABS = scandir(DirectoryToScan, 1);
        $FunctionFiles=[];
        foreach ($ABS as $key => $name) {
            if (strpos($name, 'class.') !== false) {
                $FunctionFiles[$name] = DirectoryToScan . $name;
            }
        }
        foreach (FunctionFiles as $key => $functionfile) {
            require_once $functionfile;
        }
        //all methods can be used on here.
    }
}

D. я не могу использовать, это то, что я хочу:

$intance = new Class_Example();
$intance->Example1();
$intance->Example2();

Как связать файлы с методами с классом, не меняя структуру или содержимое файловых методов ??

1 Ответ

0 голосов
/ 16 марта 2019

Я решаю это с помощью этого кода:

class Class_Example {
    public function ChargeFunction() {
        $DirectoryToScan ='/functionsfiles/'
        $ABS = scandir(DirectoryToScan, 1);
        $FunctionFiles=[];
        foreach ($ABS as $key => $name) {
            if (strpos($name, 'class.') !== false) {
                $FunctionFiles[$name] = DirectoryToScan . $name;
            }
        }
        foreach ($FunctionFiles as $key => $functionfile) {
            require_once $functionfile;
        }
    }
    function __call($functionName, $args) {
        if (function_exists($functionName)) {
            return call_user_func_array($functionName, $args);
        }
    }
}

реализовать магическую функцию __call, чтобы решить эту проблему.

...