锟斤拷锟斤拷锟斤拷

PHP 5 支锟街筹拷锟斤拷锟斤拷统锟斤拷蠓椒锟斤拷锟斤拷锟斤拷锟轿拷锟斤拷锟斤拷锟洁不锟杰憋拷实锟斤拷锟斤拷锟斤拷锟轿猴拷一锟斤拷锟洁,锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟揭伙拷锟斤拷锟斤拷锟斤拷潜锟斤拷锟斤拷锟轿拷锟斤拷锟侥o拷锟斤拷么锟斤拷锟斤拷锟酵憋拷锟诫被锟斤拷锟斤拷为锟斤拷锟斤拷摹锟斤拷锟斤拷锟斤拷锟轿拷锟斤拷锟侥凤拷锟斤拷只锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷梅锟绞斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷芏锟斤拷锟斤拷锟斤拷锟斤拷墓锟斤拷锟绞碉拷帧锟�

锟教筹拷一锟斤拷锟斤拷锟斤拷锟斤拷锟绞憋拷锟斤拷锟斤拷锟斤拷锟诫定锟藉父锟斤拷锟叫碉拷锟斤拷锟叫筹拷锟襟方凤拷锟斤拷锟斤拷锟解,锟斤拷些锟斤拷锟斤拷锟斤拷锟斤拷锟绞匡拷锟斤拷锟斤拷锟斤拷透锟斤拷锟斤拷锟揭伙拷锟斤拷锟斤拷锟斤拷吒锟轿拷锟斤拷桑锟斤拷锟斤拷锟斤拷锟侥筹拷锟斤拷锟斤拷蠓椒锟斤拷锟斤拷锟斤拷锟轿拷鼙锟斤拷锟斤拷模锟斤拷锟矫达拷锟斤拷锟斤拷锟绞碉拷值姆锟斤拷锟斤拷锟接︼拷锟斤拷锟斤拷锟轿拷鼙锟斤拷锟斤拷幕锟斤拷吖锟斤拷械模锟斤拷锟斤拷锟斤拷芏锟斤拷锟轿斤拷械摹锟斤拷锟斤拷夥斤拷锟斤拷牡锟斤拷梅锟绞斤拷锟斤拷锟狡ワ拷洌拷锟斤拷锟斤拷秃锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷一锟铰★拷锟斤拷锟界,锟斤拷锟洁定锟斤拷锟斤拷一锟斤拷锟斤拷选锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷蠓椒锟斤拷锟斤拷锟斤拷锟斤拷锟矫伙拷校锟斤拷锟斤拷锟斤拷叩锟斤拷锟斤拷锟斤拷锟斤拷蕹锟酵伙拷锟� 锟斤拷也锟斤拷锟斤拷锟斤拷 PHP 5.4 锟斤拷墓锟斤拷旌拷锟斤拷锟斤拷锟� PHP 5.4 之前锟侥癸拷锟届函锟斤拷锟斤拷锟斤拷锟斤拷锟皆诧拷一锟斤拷锟侥★拷

Example #1 锟斤拷锟斤拷锟斤拷示锟斤拷

<?php
abstract class AbstractClass
{
 
// 强锟斤拷要锟斤拷锟斤拷锟洁定锟斤拷锟斤拷些锟斤拷锟斤拷
    
abstract protected function getValue();
    abstract protected function 
prefixValue($prefix);

    
// 锟斤拷通锟斤拷锟斤拷锟斤拷锟角筹拷锟襟方凤拷锟斤拷
    
public function printOut() {
        print 
$this->getValue() . "\n";
    }
}

class 
ConcreteClass1 extends AbstractClass
{
    protected function 
getValue() {
        return 
"ConcreteClass1";
    }

    public function 
prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass1";
    }
}

class 
ConcreteClass2 extends AbstractClass
{
    public function 
getValue() {
        return 
"ConcreteClass2";
    }

    public function 
prefixValue($prefix) {
        return 
"{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo 
$class1->prefixValue('FOO_') ."\n";

$class2 = new ConcreteClass2;
$class2->printOut();
echo 
$class2->prefixValue('FOO_') ."\n";
?>

锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

Example #2 锟斤拷锟斤拷锟斤拷示锟斤拷

<?php
abstract class AbstractClass
{
    
// 锟斤拷锟角的筹拷锟襟方凤拷锟斤拷锟斤拷要锟斤拷锟斤拷锟斤拷要锟侥诧拷锟斤拷
    
abstract protected function prefixName($name);

}

class 
ConcreteClass extends AbstractClass
{

    
// 锟斤拷锟角碉拷锟斤拷锟斤拷锟斤拷远锟斤拷甯革拷锟角╋拷锟斤拷胁锟斤拷锟斤拷诘目锟窖★拷锟斤拷锟�
    
public function prefixName($name$separator ".") {
        if (
$name == "Pacman") {
            
$prefix "Mr";
        } elseif (
$name == "Pacwoman") {
            
$prefix "Mrs";
        } else {
            
$prefix "";
        }
        return 
"{$prefix}{$separator} {$name}";
    }
}

$class = new ConcreteClass;
echo 
$class->prefixName("Pacman"), "\n";
echo 
$class->prefixName("Pacwoman"), "\n";
?>

锟斤拷锟斤拷锟斤拷锟教伙拷锟斤拷锟斤拷锟�

Mr. Pacman
Mrs. Pacwoman

锟较达拷锟斤拷锟斤拷锟斤拷锟矫伙拷锟斤拷远锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷为"abstract"锟斤拷锟斤拷应锟斤拷锟杰诧拷锟斤拷锟睫改碉拷锟斤拷锟斤拷锟斤拷锟叫★拷