Вопросы по ООП в PHP

8.25K
.
(\/)____o_O____(\/)
Blade, автолоад и статические методы, тоже вариант
.
Koenig, ну если по назначению классы сами посебе похожи то почему бы и не сделать родителя для них. Незнаю как у тебя так получается, я когда только начинал с ООП знакомится наследование ниразу не понадобилось. А сейчас теперь не могу понять нахрена нужны интерфейсы, потом там еще какие то трейты в пхп вводить собирались.
.
Blade (03.08.2012/13:15)
Koenig, пишешь какие то методы, а потом подключаешь их в любые классы.
это как?
мб ты имел ввиду создать в классе метод а потом из другого файла его вызывать?
.
Koenig, Если наследование оправдано - применяй.
В остальных случаях, передавай необходимые обьекты в класс.. х.з как это на пальцах то обьяснить.

Вобще, скажу не оч.правильную вещь, ну да пофиг: если ты привык к процидурам - используй их.
М.б потом станет легче и ты самостоятельно найдёшь нужный путь.
.
The Frontend-Warrior
Screamer, нет, я кажись с интерфейсами спутал
.
The Frontend-Warrior
нет, это трейты, вот чо. только это для php 5.4
http://ru2.php.net/manual/ru/l ... s.php
.
(\/)____o_O____(\/)
Screamer, ну я например в трайтах пока не нашел нужды, но вот например в нэймспейсах плюс есть
.
(\/)____o_O____(\/)
Blade (03.08.2012/15:27)
нет, это трейты, вот чо. только это для php 5.4
http://ru2.php.net/manual/ru/l ... s.php
тоже по сути можно собрать что я написал, даже отдельные методы вытащить, но пока все это сложно для понимания
.
Вот учу ооп, есть такой код
abstract class AUser {
    abstract function showInfo();
}


    //создаем класс
    class User extends AUser{
        public $name;
        public $login;
        public $password;
        const INFO_TITLE = 'Данные пользователя:<br/>';
        function showTitle(){
            print (self::INFO_TITLE);
        }
        //создаем метод
        function showInfo(){
            echo 'Имя - '.$this->name.'<br/>';
            echo 'Логин - '.$this->login.'<br/>';
            echo 'Пароль - '.$this->password.'<br/>';
        }
        function __construct ($n = '',$l = '',$p = ''){
            try{
                if($n == '' or $l == '' or $p == '')
                    throw new Exception('введены не все данные');
                $this->name = $n;
                $this->login = $l;
                $this->password = $p;
            }catch(Exception $e){
                echo $e->getMessage();
            }
            
        }
        function __clone(){
            $this->name = 'Guest';
            $this->login = 'guest';
            $this->password = 'qwerty';
        }
    }
    //создаем объект 1
    $ob1 = new User('zhenya','zheka','23534');
    //print (User::INFO_TITLE);
    echo $ob1->showTitle();
    echo $ob1->showInfo().'<br/>';//Вызов метода
    //создаем объект 2
    $ob2 = new User('lol','loh','6546');
    //print (User::INFO_TITLE);
    echo $ob1->showTitle();
    echo $ob2->showInfo().'<br/>';//Вызов метода
    //создаем объект 3
    $ob3 = new User('vasya','vasya','13765495');
   // print (User::INFO_TITLE);
   echo $ob1->showTitle();
    echo $ob3->showInfo().'<br/>';//Вызов метода
    $ob4 = clone $ob1;//Копирование объекта
    echo $ob4->showInfo().'<br/>';//Вызов метода
    
    interface ISuperUser {
    function getInfo();
    }

class SuperUser extends User implements ISuperUser{
    public $role;
    function __construct ($n,$l,$p,$r){
        parent::__construct($n,$l,$p);
        $this->role = $r;
    }
    function showinfo(){
        parent::showInfo();
        echo 'Роль - '.$this->role.'<br/>';
        
    } 
    function getInfo(){
        $arr = array();
        foreach($this as $k=>$v){
            $arr[$k] = $v;
            return $arr;
        }
    }  
}
$ob5 = new SuperUser('Super admin','root','pass','admin');
echo $ob5->showInfo().'<br/>';
print_r ($ob5->getInfo());

print_r ($ob5->getInfo()); должно вывести все содержимое массива, а выводит не все.
Где ошибка?
.
Zheka12345, Смотрю за уроки от специалиста взялся? =) Слушай Игорька и всё получится, пересмотри снова.
Всего: 383