Friday 1 August 2014

Using anonymous class to instantiate object


use \Domain\ModelOrder as ModelOrder;

class ClassA extends classB
{
public function __construct(Context $context = null)
{
$this->modelOrder = function ($context)
{
return new ModelOrder($context);
};

parent::__construct($context);
}

protected function test()
{
$ordermethodA = $this->modelOrder->getmethodA();

return true;
}
}

Autoloading Classes

Many developers writing object-oriented applications create one PHP source file per class definition. One of the biggest annoyances is having to write a long list of needed includes at the beginning of each script (one for each class).
In PHP 5, this is no longer necessary. You may define an __autoload()  function which is automatically called in case you are trying to use a class/interface which hasn't been defined yet. By calling this function the scripting engine is given a last chance to load the class before PHP fails with an error.

Example #1 Autoload example
This example attempts to load the classes MyClass1 and MyClass2 from the files MyClass1.php and MyClass2.php respectively.
<?phpfunction __autoload($class_name) {
    include 
$class_name '.php';
}

$obj  = new MyClass1();$obj2 = new MyClass2(); 
?>



Cf. http://php.net/manual/en/language.oop5.autoload.php#language.oop5.autoload


Using Fluent Interface for method chaining

In the fluent interface, one setter method returns the current object ; this is implemented  for doing method cascading (or method chaining) ; please refer to wikipedia for further explanation  http://en.wikipedia.org/wiki/Fluent_interface

In PHP, one can return the current object by using the $this special variable which represent the instance. Hence return $this; will make the method return the instance. The example below define a class Employee and three methods to set its name, surname and salary. Each return the instance of the Employee class allowing to chain methods.

<?php
class Employee
{
    public $name;
    public $surName; 
    public $salary;
 
    public function setName($name)
    {
        $this->name = $name;
 
        return $this;
    }
 
    public function setSurname($surname)
    {
        $this->surName = $surname;
 
        return $this;
    }
 
    public function setSalary($salary)
    {
        $this->salary = $salary;
 
        return $this;
    }
 
    public function __toString()
    {
        $employeeInfo = 'Name: ' . $this->name . PHP_EOL;
        $employeeInfo .= 'Surname: ' . $this->surName . PHP_EOL;
        $employeeInfo .= 'Salary: ' . $this->salary . PHP_EOL;
 
        return $employeeInfo;
    }
}
 
# Create a new instance of the Employee class:
$employee = new Employee();
 
# Employee Tom Smith has a salary of 100:
echo $employee->setName('Tom')
              ->setSurname('Smith')
              ->setSalary('100');
 
# Display:
# Name: Tom
# Surname: Smith
# Salary: 100