Zend Engine 2.0

AnToXa

prodigy-одаренный ребенок
Zend Engine 2.0

Собрал у себя php 4.1.2 + ZendEngine 2.0 + Apache 1.3.20 php - static модуль

дата: 05.04.2002 14.00-18.00 Nsk время (+6 GMT)
т.к. качалось из cvs, то все может меняться

Выложил тесты, которые были KVN
смотреть тут http://212.20.30.181:2811/ZE2/test[число от 1 до 9 (по номерам у KVN)].php

Некоторые замечания:

1. Пример номер 9 (где у KVN пхп ругалась на переопределение функции __construct) работает номально
2. Нашел косяк в обработке exptions (кстати жаль, что php умеет throw только объекты)

вот код, на нем пхп просто срубается и валит апач в корку,
если я убираю все, что связано с StdClass, то все прекрасно работает
причем, если создать еще один класс для обработки исключений, то с ним все работает,
т.е. дело в StdClass


PHP:
    class MyException {

		function MyException($_error) {
			$this->error = $_error;	
		}
		
		function getException() {
			return $this->error;	
		}
	}
	
	function ThrowException() {
	    throw new StdClass;
		throw new MyException("'This is an exception!'");	
	}
	
	
	try {
		ThrowException();	
	} catch (MyException $exception) {
		echo 'There was an exception: ' . $exception->getException() . "\n";
	}
	catch (StdClass $exeption) {
		echo 'something bad has happened';
	}
3. Все дело в stdClass
например вот такой код у меня роняет апач (чилд умирает по SIGSEGV)
PHP:
 $obj->fld = "value";
а вот такой
PHP:
  class Test {}
  $obj = new Test;
  $obj->fld = "value";
работает

видимо разработчики оставили этот stdClass (кстати написание не зависит от регистра) для совместимости,
но вот зачем это допускать смерть чилда при таком раскладе непонятно

4. А про массивы забыли

не сделали dereferencing массивов, аналогично объектам
т.е. нельзя написать func(парметры)[индекс], вернее написать-то можно :) но пхп ругается
Parse error: parse error, unexpected `'['' in ....
 

kvn

programmer
Re: Zend Engine 2.0

Автор оригинала: AnToXa
Собрал у себя php 4.1.2 + ZendEngine 2.0 + Apache 1.3.20 php - static модуль
т.е. дело в StdClass
Странно!
Тестил твой пример:
PHP:
$obj = new StdClass();

$obj->var1 = "VAL OF VAR 1";

echo $obj->var1;
echo "\n\n";

class MyException {

        function MyException($_error) {
            $this->error = $_error;
        }

        function getException() {
            return $this->error;
        }
    }

    function ThrowException() {
        throw new StdClass;
        throw new MyException("'This is an exception!'");
    }

    try {
        ThrowException();
    } catch (MyException $exception) {
        echo 'There was an exception: ' . $exception->getException() . "\n";
    }
    catch (StdClass $exeption) {
        echo 'something bad has happened' . "\n";
    }
Выводит:
VAL OF VAR 1

something bad has happened

3. Все дело в stdClass
например вот такой код у меня роняет апач (чилд умирает по SIGSEGV)
PHP:
 $obj->fld = "value";
Тоже странно, потому как у меня ПХП ни в какую кору не упал.. прожевал и не поперхнулся..

а вот такой
PHP:
 class Test {}
 $obj = new Test;
 $obj->fld = "value";
работает
видимо разработчики оставили этот stdClass (кстати написание не зависит от регистра) для совместимости,
но вот зачем это допускать смерть чилда при таком раскладе непонятно
Дело в том, что я не понимаю, зачем использовать заранее внутренние названия классов в своих разработках..
Это, кстати, документированная фича, и сами девелоперы не рекомендуют использовать внутренние фичи для своих, так сказать, целей...

4. А про массивы забыли
не сделали dereferencing массивов, аналогично объектам
т.е. нельзя написать func(парметры)[индекс], вернее написать-то можно :) но пхп ругается
Parse error: parse error, unexpected `'['' in ....
Тут да, ничего не поделаешь..
Дик зато есть: ShapeFactoryMethod("Circle")->draw();

Вот такие дела.
 
Сверху