On Tuesday 31 August 2004 05:46, Alan Knowles wrote: > I've been looking at events in PHP, at present, in PEAR, there are lots > of different methods to add callbacks, to packages, for various > purposes. It seriously lacks cohesion, and would be nice to sort out at > the language level. > > Having seen C#, while not perfect, it is an interesting model. > There's a very short note on C#, and an idea for a PHP syntax. > http://www.akbkhome.com/wiki.php/DBDO/signals.html > > It suggests: > > class xxxx { > // event registers a method, that hooks into the generic event > handler. > public event $onDebug = array(); > > > function somemethod() { > > // add a handler to an event.. > // this is the natrual syntax for this, but does open the door to > someone wiping the stack! > $this->onDebug[] = array($this,'mycallback'); > > > // initiate the signals. (function name matches the var!) > $this->onDebug($x,$y); > } > // a handler.. > function mycallback($x,$y) { > echo "debug hander got $x , $y\n"; > } > } > > > Anyone care to comment on > a) the feasibility > b) the "should it be implemented" question. > c) the "any better ideas" question...
I think this would be a good idèa to get into PHP in some way, however I would recommend that the signal/slot technology used in QT should be considered. It's really simple and flexible to use. Here is an example of how this could be done in PHP (not the best example, but it should show how it works ): class MessageHandler { public signal messageSent( $message ); private function checkQueue() { foreach ( $messageQueue as $messsage ) { // Send a signal for each message // So that the connected slots can handle it emit messageSent( $message ); } } } class MyEmailMessageHandler { public slot sendEmail( $message ) { mail( $message ); } } class MySMSMessageHandler { public slots sendSMS( $message ) { sendSMS( $message ); } } When you instantiate your objects: $messageHandler = new MessageHandler(); $emailHandler = new MyEmailHandler(); $smsHandler = new MySMSHandler(); // Connect is used to connect signals with slots. // A signal can be used by multiple slots and a slot // can have multiple signals connected to it. connect( $messageHandler, 'messageSent', $emailHandler, 'sendEmail' ); connect( $messageHandler, 'messageSent', $emailHandler, 'sendSMS' ); There is some documentation on how that system works here: http://doc.trolltech.com/3.3/signalsandslots.html It's just an idèa, but I think OO guys will like this. --bård -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php