[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Можно ли как то сделать?
Arh
Добрый день.
Может кто подскажет куда гуглить.
В общем сейчас такая ситуация, классы лежат в папке libs
когда делаю $test new test; происходит автозагрузка, ну это понятно.

Надоело каждый раз делать new

Пример:
$db = new db;
$test = new test;
$config = new config;

if($config->yes) {
$row = $db->query('SELECT ...')->fetch();
echo $test->ololo($row);
} else {
echo $test->blabla(true);
}


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

Хотелось бы иметь какой то 1 класс, который будет возвращать объекты классов, а если они еще не были созданы, то создавать.

Типа так что ли:

if(AAA::config->yes) {
$row = AAA::db->query('SELECT ...')->fetch();
echo AAA::test->ololo($row);
} else {
echo AAA::test->blabla(true);
}


Можно ли так сделать? Нормально ли это будет с точки зрения всяких там стандартов? Какие могут быть проблемы в будущем?

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Arh
Вот так вот работает, но опять же надо получать объекты.

class AAA {
static $obj = array();
static function go ($var = '') {
if(!isset(self::$obj[$var])) {
self::$obj[$var] = new $var;
}
return self::$obj[$var];
}
}


$db = AAA::go('db');
$row = $db->query('SELECT * FROM users')->fetch();
print_r($row);


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
bestxp
Да отчасти нормально, называется подход сервис локатор и ленивая загрузка

в идеале тебе портебуется карта классов и как их отдавать, инстанс или новый

всё будет сводиться к магии

например

sl::i()->classAlias->method()

из готового можешь посмотреть в сторону Pimple очень маленькая и быстрая штука, опять же один раз описываешь как грузить и далее он сам
Arh
bestxp
Спасибо, пойду курить всё это дело)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
inpost
class AAA {
static $obj;
static function _() {
if(!isset(self::$obj[$var])) {
self::$obj = new __CLASS__;
}
return self::$obj;
}
public function print($text) {
echo 'ups';
}
}


$db = AAA::_()->print('db');


Но удобно ли это? Как по мне процедурное программирование значительно удобнее + гораздо меньше дёргать инициализацию классов. Используешь только там, где пользуешься с какой-нибудь библиотекой.
+ Местами использую Alias, для быстрого программирования.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Arh
inpost
Что то не работает ваш пример.

Вот так конечно не удобно
$db = AAA::_()->print('db');



Инициализация это что в данном случае?

Суть в том что бы класс был инициализирован (если я правильно понял) только один раз, но пользоваться им можно было бы сколько угодно.

class test {

}


class AAA {
static $obj = array();
static function go ($var = '') {
if(!isset(self::$obj[$var])) {
echo '1-раз';
self::$obj[$var] = new $var;
}
return self::$obj[$var];
}
}


AAA::go('test');
AAA::go('test');
AAA::go('test');
AAA::go('test');
AAA::go('test');
AAA::go('test');
AAA::go('test');
AAA::go('test');



new будет только 1 раз.

Цитата
Используешь только там, где пользуешься с какой-нибудь библиотекой.



В том то и дело, что есть библиотеки которые используются абсолютно в разных функциях, так удобнее её вызвать один раз в какой либо функции, а потом просто юзать. Или я не так понял смысл инициализации классов в пхп =)

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.