Prototypes and Ad-hoc objects

 

Auke van Slooten

auke@muze.nl

www.poefke.nl

 

Ad hoc objects

 

  • Objects created 'in place'
     
  • In PHP 7 as 'Anonymous Classes'
    https://wiki.php.net/rfc/anonymous_classes
     
  • You know this already from Javascript
var adHoc = {

     property: 'world',

     method: function() {
         return 'hello '+this.property;
     }

}
$adHoc = new class {

    public $property = 'World';

    public function method() {
        return 'Hello '.$this->property;
    }
}

Prototypes

 

  • Inheritance for Objects, not Classes
     
  • Not in PHP 7
     
  • You know this already from Javascript
var adHoc2 = {
    property: 'Moon'
}

adHoc2.prototype = adHoc;
adHoc2->method(); // => 'Hello Moon'

 

PHP 5.4?

This is cool, I want to use it now!

<?php
    $adHoc = new adhoc([
        'property' => 'World',
        'method' => function() {
            return 'Hello '.$this->property;
        }
    ]);


 

?

<?php
    class addHoc() {
        public function __construct($props) {
            foreach($props as $name => $value) {
                $this->{$name} = $value;
            }
        }
    }



 

?

Method 'method' not found.


Properties != Methods

 

:-(

!

Embrace the __magic

?

<?php
    class addHoc() {

        public function __call($name, $params) {
            return call_user_func_array(
                $this->{$name},
                $params
            );
        }

    }



!

"Hello "

:-(

 

\Closure::bind(To)

<?php
    class addHoc() {

        public function __construct($props) {
            foreach($props as $name => $value) {
                if ( $value instanceof \Closure ) {
                    \Closure::bind( $value, $this );
                }
                $this->{$name} = $value;
            }
        }

    }


:-)

"Hello World"

And prototypes...?

Prototypes and Ad-hoc objects

By Auke van Slooten

Prototypes and Ad-hoc objects

  • 2,407