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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> new в цикле 
:(
    Опции темы
php1221
Дата 11.12.2011, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.11.2011

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



Код

//auto load classes
if ($handle = opendir('class')) {
    while (false !== ($file = readdir($handle))) { 
        if ($file != "." && $file != "..") { 
            include('class/'.$file);
        }
    }
}
closedir($handle);
//manual connect to classes
$db = new db;
$settingsDatabase = new settingsDatabase;
$notices = new notice;
$people = new people;
$html = new html;

Нужно эту часть кода:
Код

$notices = new notice;
$people = new people;
$html = new html;

сделать в первый цикл, чтобы new исполнялось внутри цикла автоматически к каждому названию файла.

Как это лучше сделать?
PM MAIL   Вверх
WolfAlone
Дата 12.12.2011, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


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

Репутация: 1
Всего: 5



Не совсем понял вопроса, но, возможно вот это код (пример) поможет?
Код

<?php
class class1 {
    public function __construct() {
        echo "Hello world!";
    }
}

$class_name = 'class1';
$a = new $class_name;
?>



--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
$дмитрий
Дата 12.12.2011, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 17
Всего: 45



По идеи так
Код

if ($handle = opendir('class')) {
    while (false !== ($file = readdir($handle))) { 
        if ($file != "." && $file != "..") { 
            include('class/'.$file);
            $sClass = substr($file, 0, -4);
            $$sClass = new $sClass;
        }
    }
}
closedir($handle);

PM MAIL   Вверх
message
Дата 19.12.2011, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 8.9.2008

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



я не понимаю, вы пытаетесь изобрести autoload

Код

// добавляем папки с классами в include path.
$paths = array('/путь/к/папке/с/классами1', '/путь/к/папке/с/классами2', get_include_path());
set_include_path(implode(PATH_SEPARATOR, $paths));

// автозагрузка классов
function __autoload($className) {
    require_once $filename . '.php';
}


Теперь просто вызываете
Код

$db = new DatabaseClass(); 

и autoloader будет искать файл DatabaseClass.php в тех папках которые вы указали
PM MAIL   Вверх
krundetz
Дата 20.12.2011, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



php1221, совместите варианты предложенные message и $дмитрий.

То есть ваш код будет выглядеть примерно так:
Код


function __autoload($className) {
    require_once 'class/' $filename . '.php';
}

if ($handle = opendir('class')) {
    while (false !== ($file = readdir($handle))) { 
        if ($file != "." && $file != "..") { 
            $sClass = substr($file, 0, -4);
            $$sClass = new $sClass;
        }
    }
}


P.S. Обязательно в функции __autoload сделайте проверку на существование подключаемого файла и существование подключаемого класса, как то так:

Код

function __autoload($className) {
    $pathClass = 'class/' $filename . '.php';
    if (file_exists($pathClass)) {
        require_once $pathClass;
        if (!class_exists($className)) {
            throw new Exception('Class not found!');
        }
    } else {
         throw new Exception('File not found!');
    }
}


P.P.S.
message ваш вариант использующий функцию set_include_path имеет неоднозначность в случае нахождения в директориях, для автоматического подключения классов, файлов с одинаковыми именами.

P.P.P.S.
php1221, а как вы собираетесь использовать созданные в цикле экземпляры классов? Возможно есть более разумное решение, нежели то, что вы хотите использовать.

Это сообщение отредактировал(а) krundetz - 20.12.2011, 10:16


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


Эксперт
***


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

Репутация: 17
Всего: 45



Кстати, разумно вместо
Код

$notices = new notice;
$people = new people;
$html = new html;

Использовать единый массив
Код

$lib['notice'] = new notice;
$lib['people'] = new people;
$lib['html'] = new html;
// etc

При использовании вышеуказанных методов в функциях, классах и т.д., ты ж не будешь писать global $notices, $people, $html

Это сообщение отредактировал(а) $дмитрий - 20.12.2011, 18:33
PM MAIL   Вверх
krundetz
Дата 20.12.2011, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



$дмитрий, может
Код

$lib['notice'] = new notice;

без new в название элемента ассоциативного массива?


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


Эксперт
***


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

Репутация: 17
Всего: 45



упс, скобки пропустил
Код
    
$lib['notice'] = new notice();

PM MAIL   Вверх
krundetz
Дата 20.12.2011, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата($дмитрий @  20.12.2011,  14:02 Найти цитируемый пост)
упс, скобки пропустил

не со скобками все в порядке, если в конструктор не передаются аргументы, скобки можно опустить, хотя и выглядит это кривовато

Я поправку показал так как на мой взгляд там бы было расхождение в дальнейшем в работе с ассоциативным массивом, так как 'new notice' полноценный ключ, но ожидалось бы 'notice' и запрашивалось скорее всего оно же


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


Эксперт
***


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

Репутация: 17
Всего: 45



krundetz, увидел очепятку
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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