PHPUnit and floating point precision

Last week I’ve had some trouble unit testing a function that converted a point on a map given in degrees, minutes and seconds, to a longitude and a latitude. I did not write the function myself, but was only unit testing it. PHPUnit gave me some weird output, from which I could not extract a cause. Some mighty debugging got me to the bottom of it.

Continue reading »

Service Layer in PHP

I’ve been thinking about robust, extensible, and easy patterns or strategies for setting up an application. Starting from an MVC viewpoint, I feel there’s a need for an extra layer, a service layer.
The service layer can handle workflow that only represents business logic. This meas the Controllers and Models can focus on their own tasks, being handling request logic and persistence logic respectively.
Service layer is a broad concept, and there are many ideas and examples available, for different languages and frameworks. My goal is to try and sculpt it in such a way that it fits in with PHP and Zend Framework.

Continue reading »

Xdebug, Zend Server CE and Widows 7

Trying to get Xdebug working to enable PHPUnit’s code coverage ability. Here’s how I got it working:

Download the Xdebug dll from http://www.xdebug.org/download.php, you can find the information about which compiler was used and wether thread safety was enabled in phpinfo().
In theory you could place this dll anywhere on your system, since you’re installing it as a zend_extension, you are obligated to provide the full path. Albeit it is probably best to put it somewhere in the Zend Server installation directory. I myself put it in the default, which you can probably find at the end of your php.ini file, under the [Zend] section, in the extension_dir directive. But even if you put it in that directory, you will still have to give it the full path later on. The extension dir only refers to regular extensions, not zend_extensions.

For configuring the setup I recommend going through the ini files themselves, as the ZendServer’s webinterface gave me some problems, as to setting the directives in the php.ini to extension instead of zend_extension.

Add the following to the bottom of the [Zend] section in the php.ini, with the correct path ofcource:

zend_extension="C:\Path\to\Zend\ZendServer\lib\phpext\php_xdebug-2.1.0-5.3-vc9-nts.dll"

In order for this to work correctly we need to disable the Zend Debugger and Optimizer (for some reason…). Go to Zend\ZendServer\etc\cfg\debugger.ini and delete the following line:

zend_extension_manager.dir.debugger="C:\path\to\Zend\ZendServer\lib\debugger"

in the optimizerplus.ini file, in the same dir, delete and change the following lines:

; delete or comment this one
zend_extension_manager.dir.optimizerplus="C:\path\to\Zend\ZendServer\lib\optimizerplus"
; change this one's value to 0
zend_optimizerplus.enable=0

Restart apache (or just php will do) and check you phpinfo() if it has an xdebug section.