I am very sorry to announce that the ZNF project is now discontinued. After almost three years of development, me and the other project manager Graziano realised that it was unfeasible to continue the evolution and maintenance of the project.
Several combined reasons lead to this difficult choice. First of all, I got a position as software engineer in Norway, while Graziano started his own business in Italy. The design and implementation of ZNF were time consuming activities, and they could not be carried out in the ever decreasing spare time. Moreover, the project did not have any external financing. Despite the the handful of firms which based their business on ZNF, the project received only one donation of 7.75 USD in three years. However, the main reason why I decided to discontinue the project was another: I could not stand any more PHP.
PHP 4 was a poorly designed scripting language suitable only for quick and dirty hacks with web pages. On one hand, the language had an intuitive syntax, provided a lot of functions, and offered support for various database management systems. The weak typing system together with the flexible parsing engine (that most of the times revealed spurious code only with the E_ERRORS = ALL directive) made the language popular among unskilled developers. On the other hand, however, the language had limited support for object-oriented programming (i.e., lack of support for information hiding, encapsulation and abstraction). The coexistence of both procedural and object-oriented programming easily lead to suboptimal source code. The PHP Extension and Application Repository was also developed the wishy-washy way, with core packages not even compliant to the quality guidelines.
Despite all that, PHP 4 acquired popularity and almost every cheap hosting provider started to support it. Soon after, PHP 4 content management systems started to spread, such as PHP-Nuke and phpBB. I wrote my first PHP 4 code for an assignment of a Bachelor course of web development at the University. I kind of liked the syntax of the language, but I hated the mixture of both procedural and object-oriented programming, and I thought it was probably a good idea to invest some time on other scripting languages… Until PHP 5 was announced.
PHP 5, and especially its brand new Zend Engine II, promised to introduce full-blown support for object-oriented programming. Being young and inexperienced, I thought that this would mean breaking with past and create a language and a set of packages providing all features in a object-oriented fashion. Because of that, I decided to give PHP 5 a chance and started working on ZNF when PHP 5 was still beta. With hindsight, I would not make the same choice again.
Firstly, PHP 4 ended up to be supported for three years after the first PHP 5 stable release. The majority of hosting providers then ignored PHP 5 for way too long, and they should not be blamed after all: most of the customers were likely to run PHP 4 content management systems like Joomla, Drupal, or WordPress, so why upgrading to PHP 5 and risking compatibility issues as long as PHP 4 was supported? As a consequence, ZNF lost a big potential user base.
Secondly, the vision behind PHP 5 turned out to be different from the one I expected. PHP 5 kept as much as possible of the compatibility with PHP 4, including the the mixture of both procedural and object-oriented programming. Key new features such as input filtering were added to the language as as functions rather than as classes. Not to mention that support for namespaces and Unicode is still missing, and that errors can be handled in at least three different ways (i.e., trigger/handler, PEAR error stack, or exceptions).
Considering all these reasons, I guess it is not difficult to understand my disappointment. 🙂
The ZNF project is not searching for new maintainers. The website will be accessible for some years, unless unforeseen events occurs. Feel free to fork the project, as long as you respect the LGPL 2 license. A special thanks for their contribution to the project goes to Tomasz Kuter, Denis A. Konovalyenko, Emad B., Christian Kassab, Markus Wigge, Guéric Folliot, Valentin David, and J. Chalmers.