Использование классов в PHP

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Автор оригинала: GooG2e
про ООП что-нибудь я читал и вполне удачно программировал на Java. Просто здесь свои тонкости!
бугога
 

GooG2e

Новичок
На ява было суммарное решение синглтон+фабрики
Вот весь проект
http://dump.ru/file/4820185
 

A1x

Новичок
мде, это первый фрагмент прекрасного кода который попался на глаза
PHP:
class Connection {

    private static $config;
    private static $debug;
    private static $_instance;

    private function Connection($config, $debug) {
        $this->config = $config;
        $this->debug = $debug;
         ........
    }

    public static function getInstance(){
        if(!isset($this->_instance))
            $this->_instance=new Connection(Config::getInstance()->getConfigs('base'),Config::getInstance()->getConfig('debug','base'));
        return $_this->instance;
    }

}

GooG2e, codemonkey?
 

fixxxer

К.О.
Партнер клуба
Да ладно, сигнлтоны как синглтоны, для мелких проектов почему бы и нет. Правда, я с php4 style-конструктора сначала смутился, забыл уже про такое ;)
 

A1x

Новичок
fixxxer
а обращение к статическим членам через $this
а getInstance так это же вообще Fatal error..

как будто челове что-то гдето слышал про ООП, может копипастил какой-то код но особо не задумывался
он же неимоверно крут
На java я программировал для l2 серверов
 

fixxxer

К.О.
Партнер клуба
ой. не заметил :D

интересно как оно у него вообще работало? подозреваю, что $this ссылался на объект, в котором было вызвано, в итоге создавалось по копиии public $_instance в вызывающих =)

(вот этот момент неявного создания публичных свойств меня дико выбешивает в php, кстати. куча опечаток остаются невыловленными на ранних этапах)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
вот этот момент неявного создания публичных свойств меня дико выбешивает в php
наскоко помню, он по
обращение к статическим членам через $this
делает E_STRICT, разве нет?
Наоборот точно делает.
 

fixxxer

К.О.
Партнер клуба
ага, проверил, фатал еррор будет. это кажется только в php4 работало так.

(но вообще, я в целом про $this->foo = smth при необъявленном foo).
 

Вурдалак

Продвинутый новичок
Обращение к статическим методам через $this разрешено, т.е. E_STRICT'а нет.
 

A1x

Новичок
GooG2e
зачем ты в классе User все переменные сделал static?
и зачем там метод getInstance?
 

Духовность™

Продвинутый новичок
Вот весь проект
PHP:
	private function User($base){
		$this->base=$base;
		$this->id=(isset($_SESSION['id']))?$_SESSION['id']:$_COOKIES['id'];
		$this->login=(isset($_SESSION['login']))?$_SESSION['login']:$_COOKIES['login'];
		$this->pass_hash=(isset($_SESSION['pass_hash']))?$_SESSION['pass_hash']:$_COOKIES['pass_hash'];
		$this->user_hash=(isset($_SESSION['user_hash']))?$_SESSION['user_hash']:$_COOKIES['user_hash'];
		if( $this->id=='' || $this->login=='' || $this->pass_hash=='' || $this->user_hash==''){
			$this->logged=false;
		}
		else{
			$result=$this->base->execute('SELECT * FROM `users` WHERE `id`=\''.$id.'\';');
			if ($this->base->num_rows($result)==0){
				$this->id='';
				$_SESSION['id']='';
				$_COOKIES['id']='';
				$this->login='';
				$_SESSION['login']='';
				$_COOKIES['login']='';
				$this->pass_hash='';
				$_SESSION['pass_hash']='';
				$_COOKIES['pass_hash']='';
				$this->user_hash='';
				$_SESSION['user_hash']='';
				$_COOKIES['user_hash']='';
				$this->logged=false;
			}
			elseif($this->base->num_rows($result)>1){
			
			}
		}

	}
Это не ООП.
 
Сверху