PHPCon East 2003 Closing Keynote: Zeev Suraski

by Brian Jepson

Here are my notes from Zeev Suraski's keynotes (corrections href="">are welcome):

How did we get here?

From Zeev's perspective, it began with a
little shopping cart. He and his colleague needed a quick & dirty
shopping cart app for a University research project.

So, they used PHP/FI 2.0. They found that it was inconsistent and
error prone (syntax errors turned out to be PHP problems, not
problems in their code). So, they jumped in and helped out, and PHP
3 was the result (a flexible, consistent, and extensible scripting

PHP3 and PHP4

PHP3 was revolutionary, had surprising growth, but disappointing to
Zeev and his fellow developers (they felt it wasn't up to the tasks
that other people put it to). Performance was a concern (for
example, it interpreted as it executed, so if you called a function
1000 times, it had to be interpreted 1000 times).

So, they developed PHP4 and the Zend engine (modular, fast--compiled
to an in-memory representation first, reference counting, improved
extension APIs, and thread-safety).

OO support had some problems in PHP4. Objects defaulted to
pass-by-value ("evil clones" of the objects). So, you needed to use
explicit pass-by-reference. WTMA problem: Way Too Many Ampersands.


PHP5 (Zend Engine 2) uses a handle-based object model (easy to move
objects around, better performance, better memory usage, supports
more OO features). They plan to offer a compatibility mode with
older scripts.

New OO Features: visibility levels, abstract methods/classes,
interfaces, type hints (adding some bits of typing to PHP, but just
for objects), namespaces/import (maybe), exceptions, static members,
unified constructors, destructors, instanceof operator, per-class
constants, autoload (lazy class loading), overloading/accessors,
better integration with Java, .NET, GTK+

Other stuff:

  • Beta soon
  • Advanced Data Types (hashtables, trees, etc)
  • Remote Procedure Calls (Java, .NET, Corba, etc)
  • XML improvements
  • mysqli
  • PHP-GTK 2