PHP spl_autoload

后端 未结 3 1706
借酒劲吻你
借酒劲吻你 2021-01-05 14:24

i dont really get the docs for spl_autoload

bool spl_autoload_register  ([ callback $autoload_function  ] )

from my understanding, it will

3条回答
  •  生来不讨喜
    2021-01-05 15:28

    spl_autoloader_register registers a callback function/method, that will be called when your code is trying to use a not-known class.

    A callback function can be described in several ways :

    • a simple function name : 'my_function'
    • a static method of a class : array('MyClass', 'myMethod')
    • a method of an instance of a class : array($myObject, 'myMethod')

    In the case of Doctrine, it seems to be the second solution : if a class that PHP doesn't know is used, the autoloader will call Doctrine::autoload, passing it the class name as a parameter.


    so i can also register many autoload functions?

    Yes, you can, with spl_autoload_register :

    If there must be multiple autoload functions, spl_autoload_register() allows for this. It effectively creates a queue of autoload functions, and runs through each of them in the order they are defined.

    But we don't generally define one autoloading function/method for each class we have ; that would be quite inefficient, I suppose.

    Instead, we use the class-name, which is received by the autoloading function, to decide which file should be included.

    For instance, an autoload function might look like this :

    function my_autoloader($className)
    {
        require LIBRARY_PATH . '/' . $className . '.php';
    }
    

    The trick being that if your files are named after the classes they contain, it immediatly becomes much easier ;-)

    This is why classes are often named using the PEAR convention : My_Class_Name maps to the file My/Class/Name.php

提交回复
热议问题