Что-то я хочу, не реального по-моему

craz

Нестандартное звание
есть класс

PHP:
class MainClass{
  private function foo(){
    /*тут чето происходит*/
    anyStandardFunctionPHP($args);
   /*тут тоже*/
  }
  private function bar(){
    $this->foo();
  }
  public static function getInstance(){
  /*code*/
  }
}

class SubClass extends MainClass{
  private function foo(){
     /*тут чето происходит*/ //вот это не пойму надо все дублировать?
    /*
    *
    */
     _anyStandardFunctionPHP($args);
    /*тут тоже*/ //вот это не пойму надо все дублировать?
    /*
    *
    */
   
  }
  private function _anyStandardFunctionPHP($args){
    /*тут логика какая-то, перед применением стандартной функции, с $args*/
        anyStandardFunctionPHP($args);
  }
  // и тут вот не пойму надо bar() соответвенно переписывать?
}
//и главное не пойму раньше я делал так
//$obj = MainClass()::getInstance();
// и сейчас по сути мне этого должно хватать
$obj = SubClass()::getInstance();
то есть те стандартные функции которые я допишу, и те методы класса которые я переопределю они наружу не торчат и не будут использоваться вне класса.

Что я хочу!?) Это реально?
 

shureen

Милорд Лось Кристофер
может anyStandardFunctionPHP заменить методом и использовать полиморфизм?
 

AmdY

Пью пиво
Команда форума
тебе нужно делать наоборот, шапку и футер вынеси в функцию, а изменяющийся код передавай как кэллбэк функцию.
 

craz

Нестандартное звание
может anyStandardFunctionPHP заменить методом и использовать полиморфизм?
маин класс монолит => "мне нельзя в бельдяшки я женат"

я расширяю

anyStandardFunctionPHP - любая стандартная функция пхп.

Покажите пожаааааааалуйста что вы имеете ввиду?
 

craz

Нестандартное звание
тебе нужно делать наоборот, шапку и футер вынеси в функцию, а изменяющийся код передавай как кэллбэк функцию.
они уже в функции... В MainClass - и очень приятно там себя чувствуют... Больше скажу MainClass - это один из классов фреймворка и должен обновляться, изредка, - я его трогать поэтому не могу.
 

Adelf

Administrator
Команда форума
если копипастится одна строка - это не копипаст(это если у тебя вместо тех куч комментов всего лишь вызовы методов в единичном экземпляре).
 

craz

Нестандартное звание
PHP:
 public static function loadFile($filename, $dirs = null, $once = false)
    {
        self::_securityCheck($filename);

        /**
         * Search in provided directories, as well as include_path
         */
        $incPath = false;
        if (!empty($dirs) && (is_array($dirs) || is_string($dirs))) {
            if (is_array($dirs)) {
                $dirs = implode(PATH_SEPARATOR, $dirs);
            }
            $incPath = get_include_path();
            set_include_path($dirs . PATH_SEPARATOR . $incPath);
        }

        /**
         * Try finding for the plain filename in the include_path.
         */
        if ($once) {
            include_once $filename;
        } else {
            include $filename;
        }

        /**
         * If searching in directories, reset include_path
         */
        if ($incPath) {
            set_include_path($incPath);
        }

        return true;
    }
логику хочу прописать к инклюдам, не понятно как мне потом в родительский класс вернуть эту измененную функцию?
То есть копипаст по сути и не страшен, если бы был только он... но измениться должна переопределенная функция в потомке, а использоваться в родителе
 

craz

Нестандартное звание
По правилам ООП private-метод виден только в классе, где он объявлен, в т.ч. он не наследуется.
Вам надо заменить private на protected, тогда эти методы не будут видны вне класса, но будут видны и наследоваться в порождённых классах.
PHP:
пример с public функциями
спасибо за комментарий, я как бы знаю. Наверное, пример не корректен немного... давайте примем что наследуемые функции public вообще
 

Adelf

Administrator
Команда форума
В родителе (базовом классе) ничего из потомка использоваться не может по простой причине - потомка нет
Родитель может использовать метод, переопределенный в потомке.

Помоему проблема лишь в одном: ТС не хочет менять класс-родителя. А без этого врядли получится что-то. Да и не наследование тут скорее всего нужно, а композиция.
 

Adelf

Administrator
Команда форума
Chusha
Тоже хотел добавить слово "виртуальный" к "методу" :) Но в PHP все методы виртуальные.
По уму так и должно быть. Невиртуальные методы, мягко говоря, редко нужная вещь(а помоему вообще ненужная).
 

craz

Нестандартное звание
Возможно, нет. По крайней мере, я не знаю как ибо "PHP не поддерживает перегрузку функции, также отсутствует возможность переопределить или удалить объявленную ранее функцию.".
Вероятно, есть только вариант - обратиться к авторам класса-родителя, чтобы они переписали свой класс так, чтобы юзер мог им управлять или через обращение к функциям через переменные (что плохо по моему) или через интерфейсы (что правильно, если уж ООП).
чето мне не вериться что нельзя расширить класс фреймфорка и то что зенд.тим будет расширять так как я напишу))))))
 

craz

Нестандартное звание
где зубры ООП!? старый новый год чтоль?

 

AmdY

Пью пиво
Команда форума
craz
а где ты там видишь ООП, там статика, а значит процедурщина. метод же небось вызывается везде с захардкоженым именем self::loadFile или ClassName::loadFile , подменить можно либо переписав сам класс фреймворка, либо через runkit (наверное)
 

HraKK

Мудак
Команда форума
craz
Если напишешь нормальный 1 пост, то отвечу, пока я не пойму что ты хочешь.
А еще не забудь написать не что ты хочешь сделать, а для чего. Ну как маленький)
 

craz

Нестандартное звание
craz
Если напишешь нормальный 1 пост, то отвечу, пока я не пойму что ты хочешь.
А еще не забудь написать не что ты хочешь сделать, а для чего. Ну как маленький)
завтра

craz
а где ты там видишь ООП, там статика, а значит процедурщина. метод же небось вызывается везде с захардкоженым именем self::loadFile или ClassName::loadFile , подменить можно либо переписав сам класс фреймворка, либо через runkit (наверное)
не ты не праффф
 

craz

Нестандартное звание
Имеем

http://pastebin.com/WtjNetL5 - Zend_Loader
http://pastebin.com/ur2Fzr9b - Zend_Loader_Autoloader

Хотим расширить Zend_Loader_Autoloader так чтобы при подключении файла файл + ко всему писался бы в файл(туфталогия...) Короче чтобы инклуды были не пхпешные, а собственные
 
Сверху