Inheritance: extends AbstractClass
 /**
  * @test
  */
 public function defineAbstractAndUse()
 {
     $className = 'ExampleForAbsctuction';
     $class = new Stagehand_PHP_Class($className);
     $class->defineAbstract();
     $propertyA = new Stagehand_PHP_Class_Property('a', 10);
     $methodB = new Stagehand_PHP_Class_Method('b');
     $methodB->setCode("return 'foo';");
     $methodC = new Stagehand_PHP_Class_Method('c');
     $methodC->defineAbstract();
     $class->addProperty($propertyA);
     $class->addMethod($methodB);
     $class->addMethod($methodC);
     $class->load();
     $refClass = new ReflectionClass($className);
     $refMethodB = $refClass->getMethod('b');
     $refMethodC = $refClass->getMethod('c');
     $this->assertTrue($class->isAbstract());
     $this->assertTrue($refClass->isAbstract());
     $this->assertFalse($refMethodB->isAbstract());
     $this->assertTrue($refMethodC->isAbstract());
     require_once dirname(__FILE__) . "/ClassTest/ConcreteClass.php";
     $instance = new ConcreteClass();
     $this->assertEquals($instance->a, 10);
     $this->assertEquals($instance->b(), 'foo');
     $this->assertEquals($instance->c(), 'bar');
 }
Example #2
0
    public function prefixName($name, $separator = ".")
    {
        if ($name == "Pacman") {
            $prefix = "Mr";
        } elseif ($name == "Pacwoman") {
            $prefix = "Mrs";
        } else {
            $prefix = "";
            if ($prefix == NULL) {
                return "{$prefix} {$name}";
            }
        }
        return "{$prefix}{$separator} {$name}";
    }
}
$class = new ConcreteClass();
echo $class->prefixName("Pacman"), "\n";
echo "<br/>";
echo $class->prefixName("Pacwoman"), "\n";
echo "<br/>";
echo $class->prefixName("Dog"), "\n";
echo "<br/>";
class A
{
    public $foo = 1;
}
$a = new A();
$b = $a;
// $a and $b are copies of the same identifier
// ($a) = ($b) = <id>
$b->foo = 2;
Example #3
0
 function __construct()
 {
     $caption = "Modigliani painted enlongated faces.";
     $mo = new ConcreteClass();
     $mo->templateMethod("modig.png", $caption);
 }
Example #4
0
<?php

#Example #2 Abstract class example
abstract class AbstractClass
{
    // Our abstract method only needs to define the required arguments
    protected abstract function prefixName();
    public function getName()
    {
        echo "I n AbstractClass : getName()\n";
    }
}
class ConcreteClass extends AbstractClass
{
    protected function prefixName()
    {
    }
    public function getName()
    {
        parent::getName();
        echo "I n Concrete : getName()\n";
    }
}
$oConcCl = new ConcreteClass();
$oConcCl->getName();
Example #5
0
 function __construct()
 {
     $caption = "Modigliani malował podłużne twarze";
     $mo = new ConcreteClass();
     $mo->templateMethod("https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Amedeo_Modigliani_053.jpg/220px-Amedeo_Modigliani_053.jpg", $caption);
 }
Example #6
0
<?php

abstract class AbstractClass
{
    public abstract function test();
}
class ConcreteClass extends AbstractClass
{
    public function test()
    {
        echo "test\n";
    }
}
$a = new ConcreteClass();
$a->test();
Example #7
0
<?php

/**
*
*/
abstract class Animal
{
    protected abstract function getValue();
    protected abstract function prefixValue($prefix);
    /**
     *
     */
    public function printOut()
    {
        echo $this->getValue() . "\n";
    }
}
class ConcreteClass extends AbstractClass
{
    protected function getValue()
    {
        return "ConcreteClass";
    }
    public function prefixValue($prefix)
    {
        return "{$prefix} ConcreteClass";
    }
}
$class1 = new ConcreteClass();
$class1->printOut();
echo $class1->prefixValue('FOO_') . "\n";
Example #8
0
 public static function main()
 {
     $cls = new ConcreteClass();
     $cls->templateMethod();
 }
<?php

abstract class AbstractClass
{
    // 抽象模板角色
    public function templateMethod()
    {
        // 模板方法 调用基本方法组装顶层逻辑
        $this->primitiveOperation1();
        $this->primitiveOperation2();
    }
    protected abstract function primitiveOperation1();
    // 基本方法
    protected abstract function primitiveOperation2();
}
class ConcreteClass extends AbstractClass
{
    // 具体模板角色
    protected function primitiveOperation1()
    {
    }
    protected function primitiveOperation2()
    {
    }
}
$class = new ConcreteClass();
$class->templateMethod();