/** * @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'); }
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;
function __construct() { $caption = "Modigliani painted enlongated faces."; $mo = new ConcreteClass(); $mo->templateMethod("modig.png", $caption); }
<?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();
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); }
<?php abstract class AbstractClass { public abstract function test(); } class ConcreteClass extends AbstractClass { public function test() { echo "test\n"; } } $a = new ConcreteClass(); $a->test();
<?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";
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();