В общем как я читал метод имя которого совпадает с название класса автоматически является его конструктором и вызывается при создании экземпляра класса, есть класс
class MoodleQuickForm_hidden extends HTML_QuickForm_hidden
у HTML_QuickForm_hidden есть конструктор
function HTML_QuickForm_hidden($elementName=null, $value='', $attributes=null)
{
HTML_QuickForm_input::HTML_QuickForm_input($elementName, null, $attributes);
$this->setType('hidden');
$this->setValue($value);
}
(это кстати библиотеки открытого кода PEAR)
дак вот после каких-то изменений на сервере стал выдавать
Fatal error: Call to undefined method MoodleQuickForm_hidden::MoodleQuickForm_hidden() in /var/www/mirror/cdo/lib/pear/HTML/QuickForm/element.php on line 379
если в класса MoodleQuickForm_hidden прописать ручками одноименный метод, то ошибки нет.
Подскажите какие настройка серва отвечают за наследование методов класса?
Спустя 1 час, 54 минуты, 10 секунд (10.09.2010 - 06:47) maxims написал(а):
ещё пример
локальная машина:
class B
{
function B()
{
echo 'constructor B<br>';
}
}
class A extends B
{
}
$d = new A;
$d->A();
локальная машина:
Цитата |
constructor B constructor B |
сервер:
Цитата |
constructor B Fatal error: Call to undefined method A::A() in /var/www/mirror/cdo/1.php on line 20 |
Спустя 1 час, 44 минуты, 18 секунд (10.09.2010 - 08:31) linker написал(а):
Ты вызываешь метод, которого не существует в принципе. Видимо на твоей локальной тачке стоит допотопный четвертый пхп и в нем действительно конструктор совпадает с названием класса. На серваке имхо PHP 5.x, поэтому конструкторы там объявляются так
class B
{
public function __construct()
{
}
}
Спустя 25 минут, 53 секунды (10.09.2010 - 08:57) maxims написал(а):
на локальном 5.2.4 на сервере 5.3.3
5.3.3 является универсальной и поддерживает скрипты всех предыдущих версий.
далее при установке CSM Moodle (собственно в которой сейчас проблема) идёт проверка версии пхп и если бы версия не подходила, то он бы просто не установился.
5.3.3 является универсальной и поддерживает скрипты всех предыдущих версий.
далее при установке CSM Moodle (собственно в которой сейчас проблема) идёт проверка версии пхп и если бы версия не подходила, то он бы просто не установился.
Спустя 4 минуты, 6 секунд (10.09.2010 - 09:01) ZSH написал(а):
class A extends B
{
public function __construct()
{
parent::B();
}
}
Спустя 2 минуты, 49 секунд (10.09.2010 - 09:04) linker написал(а):
Разрабы CMS часто криворуки по натуре. PHP 5.3 значительно отличается от своих предшественников. Ты пишешь
Это
$d->A()но такого метода действительно не существует.
Это
public function __construct()лишнее, надо
{
parent::B();
}
class BКласс A унаследует конструктор класса B. Кроме случаев
{
public function __construct()
{
echo 'constructor B<br>';
}
}
class A extends B {}
class B
{
public function __construct()
{
echo 'constructor B<br>';
}
}
class A extends B
{
public function __construct()
{
parent::__construct();
echo 'constructor A<br>';
}
}
Спустя 5 минут, 45 секунд (10.09.2010 - 09:09) ZSH написал(а):
Цитата |
но такого метода действительно не существует. |
а таки да
Спустя 14 минут, 43 секунды (10.09.2010 - 09:24) maxims написал(а):
нашёл интересный пост в сети
Цитата |
Версии 5.3.х для любителей хождения по граблям. Поставьте PHP 5.2.распоследний и все будет как у нормальных людей Ну в крайнем случае попробовать 5.3.2 PS 5.3.1 вообще непригоден для эксплуатации. |
Спустя 11 минут, 59 секунд (10.09.2010 - 09:36) linker написал(а):
Хождение по граблям - это писать неадекватный код. Если метода нет, то его нет и его надо определить - это адекватное программирование.
Спустя 32 минуты, 41 секунда (10.09.2010 - 10:09) maxims написал(а):
Цитата (linker @ 10.09.2010 - 06:36) |
Хождение по граблям - это писать неадекватный код. Если метода нет, то его нет и его надо определить - это адекватное программирование. |
я же не буду теперь переписывать всю CMS там более 7000 файлов , в моём случае проше пхп откатить до 5.2.х
Спустя 52 минуты, 10 секунд (10.09.2010 - 11:01) linker написал(а):
В твоем - да, только откат и подготовка к переходу на что-нибудь менее кривописанное.
Спустя 33 минуты, 41 секунда (10.09.2010 - 11:35) maxims написал(а):
я думаю что новые версии мудла будут более универсальные, но я так долга не буду работать с данной CMS ))))))
Спустя 11 часов, 6 минут, 20 секунд (10.09.2010 - 22:41) linker написал(а):
Кстати по поводу PHP 5.3.3 из официального пресс-релиза, как раз для вашего случая:
Methods with the same name as the last element of a namespaced class name will no longer be treated as constructor. This change doesn't affect non-namespaced classes.
Methods with the same name as the last element of a namespaced class name will no longer be treated as constructor. This change doesn't affect non-namespaced classes.
<?php
namespace Foo;
class Bar {
public function Bar() {
// treated as constructor in PHP 5.3.0-5.3.2
// treated as regular method in PHP 5.3.3
}
}
?>