PDA

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


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