За последние 24 часа нас посетили 34025 программистов и 1821 робот. Сейчас ищут 782 программиста ...

__autoload()

Тема в разделе "PHP для новичков", создана пользователем super-php, 20 мар 2013.

  1. super-php

    super-php Активный пользователь

    С нами с:
    8 мар 2013
    Сообщения:
    35
    Симпатии:
    0
    Хочу загрузить автоматически 2 класса, используя функцию автолоад, не грузятся чего-то.
    Все 3 файла: index.php, A.php, B.php находятся в одной папке www

    Вот файл index.php


    Код (Text):
    1. <?php
    2. function __autoload($name_class){
    3.     echo $name_class.'.php';
    4. }
    5.  
    6. $obj = new A();
    7. $obj = new B();
    8. ?>

    Файл A.php

    Код (Text):
    1.  
    2. <?php
    3. class A{
    4. public  function hi(){
    5.         echo 'Hello file 1.php';
    6.     }
    7. }
    8. ?>

    Файл B.php


    Код (Text):
    1. <?php
    2. class B{
    3. public  function hi(){
    4.         echo 'Hello file 2.php';
    5.     }
    6. }
    7. ?>

    Ошибка:
    Код (Text):
    1. A.php
    2. Fatal error: Class 'A' not found in D:\server\super-php\test.ru\www\index.php on line 6
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Код (Text):
    1.  
    2. function __autoload($name_class){
    3.    echo $name_class.'.php';
    4. }
    ну наверно все же не echo а include )))
     
  3. super-php

    super-php Активный пользователь

    С нами с:
    8 мар 2013
    Сообщения:
    35
    Симпатии:
    0
    А в чем разница от того кода, если писать так? Вот глянул в документации, только работает также, что просто __autoload что spl_autoload_register, а разница в чем такого хода?

    Код (Text):
    1. <?php
    2.  
    3. // function __autoload($class) {
    4. //     include 'classes/' . $class . '.class.php';
    5. // }
    6.  
    7. function my_autoloader($class) {
    8.     include 'classes/' . $class . '.class.php';
    9. }
    10.  
    11. spl_autoload_register('my_autoloader');
    12.  
    13. // начиная с версии PHP 5.3.0 можно использовать безымянные функции
    14. spl_autoload_register(function ($class) {
    15.     include 'classes/' . $class . '.class.php';
    16. });
    17.  
    18.  
    19.  
    20. $obj1 = new A();
    21. $obj1->hi();
    22. $obj2 = new B();
    23. $obj2->hi();
    24. ?>
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ты спрашиваешь в чем разница между инклюд и эхо? Самое время начать учить английский язык.
     
  5. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Он спрашивает в чем разница __autoload и spl.
    Сначала был __autoload, потом сделали spl_*. __autoload остался из соображений совместимости.
    Использовать лучше spl, так как он позволяет делать несколько автолоадов, что очень важно как только вы начинаете использовать чужие библиотеки - каждая подключает свой автолоад и живет.
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Фух я уж подумал недоброе.