Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Не могу разобраться со скриптом, помогите пожалуйста если не трудн (https://forum.antichat.xyz/showthread.php?t=52378)

XopoIII 30.10.2007 13:42

Не могу разобраться со скриптом, помогите пожалуйста если не трудн
 
в общем дали мне скрипт, я когда загружаю выводит ошибку там та в той то строке, я уже наизусть ее выучил но немогу понять что там нитак, посоветуйте(ошибка Fatal error: Cannot re-assign $this in T:homelocalhost3classesShop.php on line 77)

Код:

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)) {
                    $this = $newShop;
                    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;
        }
    }


groundhog 30.10.2007 13:58

И что тут лайн 77?

XopoIII 30.10.2007 15:12

вот я выделил его жирным но там плохо видно=( ($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;
}

groundhog 30.10.2007 15:57

Ну я так понял это у тебя выбивает такое на PHP5. А связано это с тем, что если в PHP4 ты переменную $this мог использовать как угодно, то в PHP5 она отнесена к разряду зарезервированных, следовательно переопределить её невозможно. По идее, если такая ошибка возникла - это некорректный алгоритм, ибо сделано "в лоб". То есть отныне ты этой переменной ничего не сможешь присвоить... Лучше заведи в классе метод вроде такого:

Цитата:

function new_ref ($class) {
if (class_exists($class)) return new $class;
return null;
}
А потом с её помощью получай новый объект в какую-то переменную и работай с ним. В любом случае - если ты от этого далёк, то пускай кодер доведёт этот скрипт до ума, чтобы он пахал в PHP5.

XopoIII 30.10.2007 16:14

я тоже подумал что в этом и есть проблема я заместо

$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 строках искать куда поставить ; ?=(

groundhog 30.10.2007 16:52

Ну насчёт корректности исправления я тебе толком сказать ничего не смогу... Ибо всё зависит от реализации алгоритма, а те куски что я видел мало что об это говорят.

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

XopoIII 30.10.2007 17:10

я посмотрел у меня помойму не закрыта функция class но я не знаю точно, можно ли тебе как нибуть файл скрипта дать или прикрипить куда нибуть чтобы ты посмотрел?

XopoIII 30.10.2007 17:21

на той строке конец пхп
?>
вот))

groundhog 30.10.2007 17:28

Цитата:

на той строке конец пхп
Ну скорее всего баланс скобок не верен...

Цитата:

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

XopoIII 30.10.2007 17:33

ну попробую все скобки пересмотреть))

groundhog 30.10.2007 17:35

XopoIII, давай смотри... Если что - тогда свистни, постараюсь время найти поставить и потестить. Что хоть за скрипт? Какого плана?

XopoIII 30.10.2007 17:47

вроде более ли менее разобрался теперь такая проблема=)
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;
}

}

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

groundhog 30.10.2007 17:55

Сложно сказать... Но мне кажется проблема в строке $this->Trauma($fighterId), т.к. идёт обращение по имени класса, то есть, я так понял вызывается конструктор (?). Может в PHP4 такое и прохляет, то в пятёрке вряд ли. Вообще, это гиблое дело переделывать такой глупый объектно-ориентированный код под пятый PHP. Проще поставить четвёрку, наверное...

XopoIII 30.10.2007 18:01

эх ты думаешь это все из за 5? тогда подскажи как мне 4 воткнуть? к сисадмину обращаться?)

groundhog 30.10.2007 18:05

XopoIII, PHP5 от PHP4 как раз и отличается более глубокой реализацией объектно-ориентированных фичей, т.е. у тебя как раз на это замут и идёт... В PHP4 ООП - это вообще страшная фикция, ограниченная рядом условий и ограничений. Поэтому в твоём коде стилистика написания соответствущая... Местами аффтар пытался изобрести колесо, что пятёрке уже сделали за него...

Цитата:

эх ты думаешь это все из за 5? тогда подскажи как мне 4 воткнуть? к сисадмину обращаться?)
А где ты собираешься хостится?

XopoIII 30.10.2007 18:09

я пока на топ сервере тестю

XopoIII 30.10.2007 18:13

или где из бесплатных хостов можно проверить будет ли на пхп 4 нормально работать...

XopoIII 30.10.2007 18:17

кинь асю пожалуйста свою в личку мне

groundhog 30.10.2007 18:23

Цитата:

я пока на топ сервере тестю
Ну по идее нету сложностей прикрутить к нему PHP4. Тут на форуме полно манов по теме как прикрутить к апачу PHP4.

Цитата:

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

Цитата:

кинь асю пожалуйста свою в личку мне
175757


Время: 17:19