How can I call a static method on a variable class?

前端 未结 6 1891
轻奢々
轻奢々 2020-12-15 15:44

I\'m trying to make some kind of function that loads and instantiates a class from a given variable. Something like this:



        
6条回答
  •  渐次进展
    2020-12-15 15:52

    Late static bindings will work for you I think. In the construct of each class do:

    class ClassName
    {
        public static $instances = array();
    
        public function __construct()
        {
            self::$instances[] = $this;
        }
    }
    

    Then... Here is an autoloader I created. See if this solves your dilemma.

    // Shorten constants for convenience
    define ('DS', DIRECTORY_SEPARATOR);
    define ('PS', PATH_SEPARATOR);
    $template = "default";
    
    // Define an application path constants
    define ('APP_ROOT', realpath('.').DS);
    define ('VIEW', APP_ROOT . 'Views' . DS);
    define ('MODEL', APP_ROOT . 'Models' . DS);
    define ('CONTROLLER', APP_ROOT . 'Controllers' . DS);
    define ('TEMPLATE', VIEW."templates".DS.$template.DS);
    define ('CONTENT', VIEW."content".DS);
    define ('HELPERS', MODEL."helpers".DS);
    
    // Check if application is in development stage and set error reporting and
    // logging accordingly
    
    error_reporting(E_ALL);
    if (defined('DEVELOPMENT')) {
        ini_set('display_errors', 1);
    } else {
        ini_set('display_errors', 0);
        ini_set('log_errors', 'On');
        ini_set('error_log', APP_ROOT.'error.log');
    }
    
    $paths = array(APP_ROOT, VIEW, MODEL, CONTROLLER, TEMPLATE, CONTENT, HELPERS);
    
    // Set the include path from Config Object
    set_include_path(implode(PS, $paths));
    
    // Autoloader
    function __autoload($class)
    {
        require_once $class.'.php';
        return;
    }
    

    Then all you have to do is

    $var = new ClassName();
    

    but you have to have a php file in the path with the name ClassName.php where ClassName is the same as the name of the class you want to instantiate.

提交回复
热议问题