Не могу разобраться со скриптом, помогите пожалуйста если не трудн

Discussion in 'PHP' started by XopoIII, 30 Oct 2007.

  1. XopoIII

    XopoIII Elder - Старейшина

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    в общем дали мне скрипт, я когда загружаю выводит ошибку там та в той то строке, я уже наизусть ее выучил но немогу понять что там нитак, посоветуйте(ошибка Fatal error: Cannot re-assign $this in T:homelocalhost3classesShop.php on line 77)

    Code:
    function Shop($DBManager = 0, $objectId = null) {
            global $DBManager;
            $this->DBObject($DBManager, $objectId);
    	$this->_app_voc = new app_voc();
        }
    
    function get($objectId=null) { 
     	if ($objectId == 0) return false; 
             if (parent::get($objectId)) { 
     //				     echo "in get clinic, $objectId, ".get_class($this)."<br/>"; 
      
                 if ($this->getVariable('type') == 'comission' and get_class($this)!='comissionshop') { 
                     $newShop = new ComissionShop(); 
                     if ($newShop->get($objectId)) { 
                         $this = $newShop; 
     		    $this->getCrncyDst(); 
                         return true; 
                     } 
                     return false; 
                 } 
      
                 if ($this->getVariable('type') == 'repair' and get_class($this)!='repairshop') { 
                     $newShop = new RepairShop(); 
                     if ($newShop->get($objectId)) { 
                         [b]$this = $newShop[/b]; 
                         return true; 
                     } 
                     return false; 
                 } 
      
                  if ($this->getVariable('type') == 'clinic' and get_class($this)!='clinic') { 
                     $newShop = new Clinic(); 
     //		     echo "in get clinic, $objectId, ".get_class($this)."<br/>"; 
      
                    if ($newShop->get($objectId)) { 
                         $this = $newShop; 
                         return true; 
                     } 
                     return false; 
                 } 
      
                  if ($this->getVariable('type') == 'magic' and get_class($this)!='magicshop') { 
                     $newShop = new MagicShop(); 
     //		     echo "in get clinic, $objectId, ".get_class($this)."<br/>"; 
      
                    if ($newShop->get($objectId)) { 
                         $this = $newShop; 
                         return true; 
                     } 
                     return false; 
                 } 
      
     	    if ($this->getVariable('type') == 'consulting' and get_class($this)!='consulting') { 
                     $newShop = new Consulting(); 
     //		     echo "in get clinic, $objectId, ".get_class($this)."<br/>"; 
      
                    if ($newShop->get($objectId)) { 
                         $this = $newShop; 
                         return true; 
                     } 
                     return false; 
                 } 
      
     	    if ($this->getVariable('type') == 'promotion' and get_class($this)!='promotion') { 
                     $newShop = new Promotion(); 
                    if ($newShop->get($objectId)) { 
                         $this = $newShop; 
                         return true; 
                     } 
                     return false; 
                 } 
      
     	    if ($this->getVariable('type') == 'mine' and get_class($this)!='mine') { 
                     $newShop = new Mine(); 
                    if ($newShop->get($objectId)) { 
                         $this = $newShop; 
                         return true; 
                     } 
                     return false; 
                 } 
      
     	    if ($this->getVariable('type') == 'transport' and get_class($this)!='transportation') { 
                     $newShop = new Transportation(); 
                    if ($newShop->get($objectId)) { 
                         $this = $newShop; 
                         return true; 
                     } 
                     return false; 
                 } 
      
     	    if ($this->getVariable('type') == 'ad_board' and get_class($this)!='adboard') { 
                     $newShop = new AdBoard(); 
                    if ($newShop->get($objectId)) { 
                         $this = $newShop; 
                         return true; 
                     } 
                     return false; 
                 } 
      
     	    return true; 
             } else { 
                 return false; 
             } 
         } 
    
     
  2. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    И что тут лайн 77?
     
  3. XopoIII

    XopoIII Elder - Старейшина

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    вот я выделил его жирным но там плохо видно=( ($this = $newShop; )

    if ($this->getVariable('type') == 'repair' and get_class($this)!='repairshop') {
    $newShop = new RepairShop();
    if ($newShop->get($objectId)) {
    $this = $newShop;
    return true;
    }
    return false;
    }
     
  4. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ну я так понял это у тебя выбивает такое на PHP5. А связано это с тем, что если в PHP4 ты переменную $this мог использовать как угодно, то в PHP5 она отнесена к разряду зарезервированных, следовательно переопределить её невозможно. По идее, если такая ошибка возникла - это некорректный алгоритм, ибо сделано "в лоб". То есть отныне ты этой переменной ничего не сможешь присвоить... Лучше заведи в классе метод вроде такого:

    А потом с её помощью получай новый объект в какую-то переменную и работай с ним. В любом случае - если ты от этого далёк, то пускай кодер доведёт этот скрипт до ума, чтобы он пахал в PHP5.
     
  5. XopoIII

    XopoIII Elder - Старейшина

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    я тоже подумал что в этом и есть проблема я заместо

    $this = $newshop;

    написал

    if (class_exists($newShop)) {
    return new $newShop;

    вроде как помогло но стала выкидывать ошибку такого рода
    Parse error: parse error, unexpected ';', expecting T_FUNCTION in T:\home\localhost\3\classes\Shop.php on line 2434

    как я понял это где-то не закрыта строка? и надо в 2500 строках искать куда поставить ; ?=(
     
  6. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ну насчёт корректности исправления я тебе толком сказать ничего не смогу... Ибо всё зависит от реализации алгоритма, а те куски что я видел мало что об это говорят.

    Что касается ошибки - возможно не закрыта строка, возможно нарушение баланса скобок {}. Что на той строке?
     
  7. XopoIII

    XopoIII Elder - Старейшина

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    я посмотрел у меня помойму не закрыта функция class но я не знаю точно, можно ли тебе как нибуть файл скрипта дать или прикрипить куда нибуть чтобы ты посмотрел?
     
  8. XopoIII

    XopoIII Elder - Старейшина

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    на той строке конец пхп
    ?>
    вот))
     
  9. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ну скорее всего баланс скобок не верен...

    Да теоретически можно, но у меня времени реально нету разгребать что-то... Я так понял - это у тебя модуль какой-то... Может даже от oscommerce, а там есть над чем подумать...
     
  10. XopoIII

    XopoIII Elder - Старейшина

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    ну попробую все скобки пересмотреть))
     
  11. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    XopoIII, давай смотри... Если что - тогда свистни, постараюсь время найти поставить и потестить. Что хоть за скрипт? Какого плана?
     
  12. XopoIII

    XopoIII Elder - Старейшина

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    вроде более ли менее разобрался теперь такая проблема=)
    Parse error: parse error, unexpected T_CLASS, expecting T_FUNCTION in T:\home\localhost\3\classes\Trauma.php on line 178

    вот эта строка

    class LightTrauma extends Trauma {

    за ней идет

    function LightTrauma($fighterId) {
    $this->Trauma($fighterId);
    $this->setVariable('type', TRAUMA_LIGHT);
    }

    function chooseType($mode, $probability) {
    if ($probability < $this->probability[$mode][TRAUMA_MEDIUM]) {
    $newTrauma = new HardTrauma($this->getVariable('fighterId'));
    } elseif ($probability < $this->probability[$mode][TRAUMA_LIGHT]){
    $newTrauma = new MediumTrauma($this->getVariable('fighterId'));
    } else {
    $newTrauma = false;
    }
    return $newTrauma;
    }

    }

    что может в быть в той строке не правильно вообще не понимаю=(
     
  13. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Сложно сказать... Но мне кажется проблема в строке $this->Trauma($fighterId), т.к. идёт обращение по имени класса, то есть, я так понял вызывается конструктор (?). Может в PHP4 такое и прохляет, то в пятёрке вряд ли. Вообще, это гиблое дело переделывать такой глупый объектно-ориентированный код под пятый PHP. Проще поставить четвёрку, наверное...
     
  14. XopoIII

    XopoIII Elder - Старейшина

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    эх ты думаешь это все из за 5? тогда подскажи как мне 4 воткнуть? к сисадмину обращаться?)
     
  15. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    XopoIII, PHP5 от PHP4 как раз и отличается более глубокой реализацией объектно-ориентированных фичей, т.е. у тебя как раз на это замут и идёт... В PHP4 ООП - это вообще страшная фикция, ограниченная рядом условий и ограничений. Поэтому в твоём коде стилистика написания соответствущая... Местами аффтар пытался изобрести колесо, что пятёрке уже сделали за него...

    А где ты собираешься хостится?
     
  16. XopoIII

    XopoIII Elder - Старейшина

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    я пока на топ сервере тестю
     
  17. XopoIII

    XopoIII Elder - Старейшина

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    или где из бесплатных хостов можно проверить будет ли на пхп 4 нормально работать...
     
  18. XopoIII

    XopoIII Elder - Старейшина

    Joined:
    29 Oct 2007
    Messages:
    386
    Likes Received:
    30
    Reputations:
    0
    кинь асю пожалуйста свою в личку мне
     
    1 person likes this.
  19. groundhog

    groundhog Elder - Старейшина

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ну по идее нету сложностей прикрутить к нему PHP4. Тут на форуме полно манов по теме как прикрутить к апачу PHP4.

    Тут хз... Надо у саппорта спрашивать какая у них стоит версия Php. Только боюсь, что везде будет 5-ка.

    175757
     
    #19 groundhog, 30 Oct 2007
    Last edited: 30 Oct 2007