   #PHP Manual Function Reference ob_start overload

   PHP Manual
   Prev  Next
   ______________________________________________________________________

LXXVIII. Object property and method call overloading

Introduction

   The purpose of this extension is to allow overloading of object
   property access and method calls. Only one function is defined in this
   extension, overload() which takes the name of the class that should
   have this functionality enabled. The class named has to define
   appropriate methods if it wants to have this functionality: __get(),
   __set() and __call() respectively for getting/setting a property, or
   calling a method. This way overloading can be selective. Inside these
   handler functions the overloading is disabled so you can access object
   properties normally.

   Warning

   This extension is EXPERIMENTAL. The behaviour of this extension --
   including the names of its functions and anything else documented
   about this extension -- may change without notice in a future release
   of PHP. Use this extension at your own risk.

Requirements

   No external libraries are needed to build this extension.

Installation

   In order to use these functions, you must compile PHP with the
   --enable-overload option. Starting with PHP 4.3.0 this extension is
   enabled by default. You can disable overload support with
   --disable--overload.

   The windows version of PHP has built in support for this extension.
   You do not need to load any additional extension in order to use these
   functions.

     Note: Builtin support for overload is available with PHP 4.3.0.

Runtime Configuration

   This extension has no configuration directives defined in php.ini.

Resource Types

   This extension has no resource types defined.

Predefined Constants

   This extension has no constants defined.

Examples

   Some simple examples on using the overload() function:

   Example 1. Overloading a PHP class
   <?php
   class OO {
       var $a = 111;
       var $elem = array('b' => 9, 'c' => 42);
       // Callback method for getting a property
       function __get($prop_name, &$prop_value) {
           if (isset($this->elem[$prop_name])) {
               $prop_value = $this->elem[$prop_name];
               return true;
           } else {
               return false;
           }
       }
       // Callback method for setting a property
       function __set($prop_name, $prop_value) {
           $this->elem[$prop_name] = $prop_value;
           return true;
       }
   }
   // Here we overload the OO object
   overload('OO');
   $o = new OO;
   echo "\$o->a: $o->a\n"; // print: $o->a:
   echo "\$o->b: $o->b\n"; // print: $o->b: 9
   echo "\$o->c: $o->c\n"; // print: $o->c: 42
   echo "\$o->d: $o->d\n"; // print: $o->d:
   // add a new item to the $elem array in OO
   $o->x = 56;
   // instantiate stdclass (it is built-in in PHP 4)
   // $val is not overloaded!
   $val = new stdclass;
   $val->prop = 555;
   // Set "a" to be an array with the $val object in it
   // But __set() will put this in the $elem array
   $o->a = array($val);
   var_dump($o->a[0]->prop);
   ?>

   Warning

   As this is an experimental extension, not all things work. There is no
   __call() support currently, you can only overload the get and set
   operations for properties. You cannot invoke the original overloading
   handlers of the class, and __set() only works to one level of property
   access.

   Table of Contents
   overload -- Enable property and method call overloading for a class
   ______________________________________________________________________

   Prev     Home     Next
   ob_start  Up  overload
