За последние 24 часа нас посетили 18820 программистов и 1731 робот. Сейчас ищут 1346 программистов ...

Доступ к методу класса (подкласса).

Тема в разделе "PHP для новичков", создана пользователем bobroff, 16 окт 2009.

  1. bobroff

    bobroff Активный пользователь

    С нами с:
    20 мар 2009
    Сообщения:
    44
    Симпатии:
    0
    Здравствуйте.

    Ситуация следующая. Например есть класс:

    Код (Text):
    1. class User {
    2. private static $instance = null;
    3.  
    4. public static function getInstance(){
    5.         if(null == self::$instance){
    6.             self::$instance = new self();
    7.         }
    8.         return self::$instance;
    9. }
    и его "подкласс" с методом "login":

    Код (Text):
    1. class User_Authentication extends User {
    2.  
    3.     public function login($login,$password){
    4.     }
    5.  
    6.  }

    Далее в тексте кода я создаю объект класс USER:

    Код (Text):
    1. $USER = User::getInstance();
    Вопрос в том, как сделать так, чтобы можно было обращаться с методу "login" прямо из объекта $USER ($USER->login()), при этом явно не создавая объект ($USER=User_Authentication::getInstance()) и не объединяя два класса в один, представленные выше.

    Заранее, спасибо
     
  2. sorteros

    sorteros Активный пользователь

    С нами с:
    28 авг 2009
    Сообщения:
    54
    Симпатии:
    0
  3. bobroff

    bobroff Активный пользователь

    С нами с:
    20 мар 2009
    Сообщения:
    44
    Симпатии:
    0
    Про классы, наследование, интерфейсы - читал уже много раз. Может, конечно, что-то упустил. Попробую прочитать статью по Вашей ссылке.
     
  4. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    bobroff
    вы напишите, что вы хотите сделать и что для этого придумали. судя по первому посту вы идете не совсем верным путем.
     
  5. bobroff

    bobroff Активный пользователь

    С нами с:
    20 мар 2009
    Сообщения:
    44
    Симпатии:
    0
    Я хочу создать библиотеку управления юзерами, но не сваливать все в кучу, а сделать:
    1. Общий класс USER;
    2. Подкласс для регистрации User_Register;
    3. Подкласс для авторизации User_Login;

    При этом, методы всех классов и подклассов должны вызываться через один объект $USER;
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Сделай наоборот.
    Делаем основной класс "пользователь абстрактный" (AbstractUser) - с основными свойствами пользователя, геттерами сеттерами этих свойств. Некие стандартные методы.
    От него наследует класс "пользователь регистрирующийся" (UserRegister) - реализация методов регистрации и прочих ближних к этому
    От него наследует класс "пользователь логинищийся" (UserLogin)... и т.д.
    В конце иерархии стоит класс User. Который ничего не реализует, но все наследует. И чтобы не было искушения создать калеченого пользователя объявляем все классы кроме User абстрактными.
     
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Еще можно вот так извратится:
    PHP:
    1. <?php
    2. $newClass="class User{
    3. ";
    4. $newClass.=file_get_contents("Register.php");
    5. $newClass.=file_get_contents("Login.php");
    6. $newClass.="
    7. }";
    8. eval($newClass);
    9.  
    10. $us=new A();
    11. $us->register();
    12. $us->login();?>
    Но это уже для души, а не как не для реальной работы.
     
  8. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    А в чем смысл?

    Это целых! два метода. Ты хочешь их раздергать по разным классам?

    Оставь их в одном классе.
    Лучше сделай отдельный класс авторизации, примерно вот так
    http://framework.zend.com/manual/en/zend.auth.html
     
  9. bobroff

    bobroff Активный пользователь

    С нами с:
    20 мар 2009
    Сообщения:
    44
    Симпатии:
    0
    Тогда класс USER раздуется до неимоверных размеров, от чего я как раз стараюсь уйти, разделив его на операции разного типа.

    Методы я привел для примера, естественно их будет заметно больше. За ссылку спасибо, изучу.
     
  10. sorteros

    sorteros Активный пользователь

    С нами с:
    28 авг 2009
    Сообщения:
    54
    Симпатии:
    0
    Не думаю, что у вас там будет столько методов, что класс можно будет назвать большим. Но если не хотите...
    Хотите базовый класс USER? И два наследника? Так используйте два объекта, что за блажь в использовании одного $USER?
    Пробуйте, как считаете нужным, со временем осознаете, как лучше.
     
  11. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Стоп.
    Задача в том чтобы разделить методы класса на группы?
    Или в том чтобы подгружать только необходимые методы?

    В первом случае вполне подходит мой алгоритм, ибо user.php будет выглядеть так:
    PHP:
    1. <?php
    2. require_once("finalUser.php");
    3. class user extends finalUser{}
    4. ?>
    А для второго случая надо курить в сторону __call() и динамически подгружать нужные функции/классы.
    Нечто вроде:
    PHP:
    1. <?php
    2. function __call($name, $arguments){
    3. switch ($name) {
    4.     case "login":
    5.         reqire_once(UserLogin.php);
    6.         $login = new UserLogin($this);
    7.         $login->login($arguments);
    8. ....
    9.  
    10. }
    11. ?>
    Но я не верю, что это настолько тяжелые классы, чтобы было необходимо думать о подгрузке не всего кода.