Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Traits autoload 
:(
    Опции темы
MoLeX
Дата 16.1.2012, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Доброе утро.
Столкнулся с проблемой в автозагрузке trait'ов, в итоге родился грязный костыль. 

index.php
Код

ini_set('include_path', '/trait/');

function __autoload( $class )
{
    require $class.'.php';    
}

function load_class( $class = null )
{
    static $obj = array();

    if( $class === null )
        exit( 'Class name is null '.$class );
    
    if( ! isset( $obj[$class] ) )
    {
        $load = '/classes/'.mb_strtolower( $class ) . '.php';

        if( ! file_exists( $load ) )
            exit( 'File class is not found '.$load );
        include $load;
        
        $obj[$class] = new $class();
    }

    return $obj[$class];
}

$test = load_class('test');
$test->t();


classes/test.php
Код

class test
{
    use MyTrait;
}



trait/mytrait.php
Код

trait MyTrait
{
    public function t()
    {
        echo __METHOD__;
    }
}


Но такое способ не тру( 
Может существует более элегантное решение?

P.S. допустим все классы лежат в папке classes, а трейты в trait

Добавлено через 46 секунд
Можно конечно сделать так
Код

spl_autoload_register('load_class');

но опять такие, надо как то вычислить что пытаемся загрузить трейт, а не класс


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
ksnk
Дата 16.1.2012, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



чем не подходят варианты
Код

ini_set('include_path', '/trait/'.PATH_SEPARATOR .'/classes/');
function __autoload( $class )
{
    require $class.'.php';    
}
$test=new test();
$test->t();


Код

//ini_set('include_path', '/trait/'.PATH_SEPARATOR .'/classes/');
function __autoload( $class )
{
    if(strtolower($class{0})==$class{0}) {// first letter is lowercase - so it's classes
       if(file_exists ('/classes/'.$class.'.php')) {
             include('/classes/'.$class.'.php');
             return ;
      }
    if(file_exists ('/trait/'.$class.'.php')) {
             include('/trait/'.$class.'.php');
             return;
    }
    require $class.'.php';    
}
$test=new test();
$test->t();




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
MoLeX
Дата 16.1.2012, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



ksnk, огород нагородил) а забыл что можно сделать простую проверку на существование файла и подключить его


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
krundetz
Дата 16.1.2012, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(MoLeX @  16.1.2012,  09:00 Найти цитируемый пост)
ksnk, огород нагородил) а забыл что можно сделать простую проверку на существование файла и подключить его 

напрашивается ещё проверка на существование самого trait


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Sanchezzz
Дата 16.1.2012, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



причем и то и то лучше подрубать только один раз) 


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
MoLeX
Дата 17.1.2012, 06:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Sanchezzz, а так и происходит. если класс уже вызывался, его экземпляр из статичной переменой возвращается


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0496 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.