Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Хороший ли подход к глобальности объекта класса?
 
 автор: pavluxa09   (31.01.2011 в 23:45)   письмо автору
 
 

Добрый день. Прошу оценить подход для выведения объекта типа PDO в глобальность:

class DupexMYSQL {
    private static $PDOObj = null;
    
    private function __construct() {}
    private function __clone() {}
    public static function Connect( PDO & $iPDOObj ) {
        if( self::$PDOObj!=null )
            throw new Exception( 'The class '.__CLASS__.' is already connected' );
        self::$PDOObj = &$iPDOObj;
        self::$PDOObj->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
    }
    public static function GetObject() {
        if( self::$PDOObj==null )
            throw new Exception( 'The class '.__CLASS__.' is not connected' );
        return self::$PDOObj;
    }
}
DupexMYSQL::Connect( new PDO( 'mysql:host=localhost;dbname=45454','545454','545454' ) );

  Ответить  
 
 автор: Красная_шляпа   (01.02.2011 в 00:38)   письмо автору
 
   для: pavluxa09   (31.01.2011 в 23:45)
 

Не корректно

<?php

function get_db()
{
static 
$db;
if (
$db !== null) return $db;
}
require(
"conf.php");
return new 
DB(...);
}
// ...
$db get_db();

[поправлено модератором]

  Ответить  
 
 автор: pavluxa09   (01.02.2011 в 00:40)   письмо автору
 
   для: Красная_шляпа   (01.02.2011 в 00:38)
 

Нето

  Ответить  
 
 автор: Красная_шляпа   (01.02.2011 в 01:16)   письмо автору
 
   для: pavluxa09   (01.02.2011 в 00:40)
 

Что не то


<?php 

// system/functions.php

// можешь назвать в стиле аля джумла-хуюмла getDBO
function get_db()  { 
    static 
$db;
    if (
is_null($db)) {
        require 
"path/to/db_conf.php";
        
$db = new MySQL($db_host$db_user$db_pass$db_name);
    }
    return 
$db;


// 

class SomeClass {
    public function 
someMethod() {
        
$db get_db();
        
// работаем с объектом
    
}
}



никаких глобальных переменных
Либо создавай статичный класс Registry


<?php

class Registry {
    private static 
$storage = array();

    public static function 
set($name$value) {
        
self::$storage[$name] = $value;
    }

    public static function 
get($name) {
        return 
self::$storage[$name];
    }
}

// в любом месте
Registry::set("db"$db);
$db Registry::get("db");



для того чтобы иметь возможность получить доступ к одному объекту ($db) в любом месте программы заводить целый класс нецелесообразно, да и смысл - проще объявить переменную глобальной(тем более таковой она по смыслу и является, меньше стоит обращать внимания на то что пишут на данную тему разные некомпетентные люди, дай Бог если им в жизни приходилось что-нибуь писать, а не править например шаблоны под джумлу)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования