PHP 抽象类的简单测试与总结

来源:互联网 发布:软件开发团队组成 编辑:程序博客网 时间:2024/06/14 07:42

<?phpabstract class AbstractClass{//定义必须设定的方法abstract protected function getValue();abstract protected function prefixValue($prefix);//普通方法的定义public function printOut(){print $this -> getValue().'\n';}public function starice(){echo "starice\n";}}//Strict standards: Non-static method AbstractClass::starice() should not be called statically in D:\wamp64\www\Ces\ClassCes.php on line 17//非静态的方法调用,能出现结果,但是会报错// AbstractClass::starice();class CLASS1 extends AbstractClass{//继承抽象类的子方法public function getValue(){return "ClassCes true";}//Fatal error: Class CLASS1 contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (AbstractClass::prefixValue) in D:\wamp64\www\Ces\ClassCes.php on line 19//必须实现抽象类的所有抽象方法protected function prefixValue($prefix){$str = '接收成功'.$prefix;return $str;}// Fatal error: Access level to CLASS1::prefixValue() must be protected (as in class AbstractClass) or weaker in D:\wamp64\www\Ces\ClassCes.php on line 26//实现抽象类的属性或方法,访问权限不能低于父类,不然将会发生语法错误。}//Fatal error: Cannot instantiate abstract class AbstractClass in D:\wamp64\www\Ces\ClassCes.php on line 30//抽象类不能进行实例化。//$obj = new AbstractClass();abstract class Foo{static function bar(){echo "test\n";}}Foo::bar();$obj = new CLASS1();echo $obj -> getValue();//------测试,定义一个抽象类abstract class ClassCes1{abstract public function index();//Fatal error: Abstract function ClassCes1::index() cannot contain body in D:\wamp64\www\Ces\ClassCes.php on line 54//抽象类不能有具体操作}//抽象类实例化失败//$obj = new ClassCes1();class ClassCes2 extends ClassCes1{public function index1(){return 'Hello,World!';}//Fatal error: Class ClassCes2 contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (ClassCes1::index) in D:\wamp64\www\Ces\ClassCes.php on line 63//没定义抽象方法public function index(){echo 'Hello , world!';}}$obj = new ClassCes2();$obj -> index();$ret = $obj -> index1();var_dump($ret);//----------------------------------------------------阶//----------------------------------------------------段//----------------------------------------------------2//----------------------------------------------------|//----------------------------------------------------|//----------------------------------------------------|abstract class ClassCes3{abstract protected function prefixName($name);}class ClassCes4 extends ClassCes3{// Fatal error: Declaration of ClassCes4::prefixName() must be compatible with ClassCes3::prefixName($name) in D:\wamp64\www\Ces\ClassCes.php on line 91//定义抽象类方法参数以为的参数必须设有默认值,并且对应的位置不能放置不同定义的参数(空参数或默认参数)public function prefixName($name,$age='18'){}}//抽象类中可以没有抽象方法,但是,具有抽象方法的类只能是抽象类。abstract class A{public function show(){echo 'A';}}class C extends B{public function world(){echo 'C';parent::hello();}}class B extends A{public function hello(){echo 'B';parent::show();}}$obj = new B;$obj -> hello();//普通类的继承就和函数调用一样,没有顺序,那抽象类呢?$obj = new C;$obj -> world();abstract class horse extends A{public function get_bred(){return "Jersey";}}class cart extends horse{public function get_breed(){return "wood";}}$obj = new cart();$return = $obj -> get_breed();var_dump($return);$return = $obj -> get_bred();var_dump($return);//抽象类顺序放下去也没有影响,模仿测试失败!class cart1 extends horse1{public function get_breed(){return "wood";}}abstract class horse1 extends A{public function get_bred(){return "Jersey";}}$obj = new cart1();$return = $obj -> get_breed();var_dump($return);$return = $obj -> get_bred();var_dump($return);//抽象类顺序再测试class F extends D{public function get_breed(){echo "wood";parent::get_bred();}}abstract class D extends A{public function get_bred(){echo 'JERSEY';}}$obj = new F;$obj -> get_breed();//类的定义先后顺序无关abstract class FOO1{abstract public function dump();}//Strict standards: Static function FOO::dump() should not be abstract in D:\wamp64\www\Ces\ClassCes.php on line 180//定义静态方法出现报错class BAR extends FOO1{public function dump($i=1){var_dump("BAR");$c += $i;var_dump($c);}}abstract class class11{abstract public function someFunc();}// abstract class class12 extends class11{// abstract public function someFunc();// }//Fatal error: Can't inherit abstract function class11::someFunc() (previously declared abstract in class12) in D:\wamp64\www\Ces\ClassCes.php on line 198//抽象类继承抽象类过程中,不能重定义以被定义的抽象类方法abstract class class12 extends class11{public function someFunc(){}}class class13 extends class12{public function someFunc(){}public function ces(){var_dump('true');}}//----------------------------------------------------------总//----------------------------------------------------------结//----------------------------------------------------------前//----------------------------------------------------------测//----------------------------------------------------------试//----------------------------------------------------------|//----------------------------------------------------------|//----------------------------------------------------------|abstract class ClassA1{public $name;abstract public function get_bred($name="zhang");}class ClassA2{public function get_bred($age="18"){var_dump($age);}}//只要对应位置参数设置形式相同即可,无需参数名相同,默认值相同$obj = new ClassA2;$obj -> get_bred();//总结/***抽象类的定义 abstract(抽象)抽象类中可以不定义抽象方法,但定义了抽象方法的只能是抽象类抽象类特性:1.抽象类继承抽象类不允许重定义抽象类方法2.抽象类不允许定义静态方法3.类的时候类似函数调用,不论创建顺序 (一般编写代码都是上到下)4.抽象类定义的抽象方法不允许有具体操作。5.继承抽象类设置抽象方法具体操作时,对应参数的设置不能改变(是否设置默认值的设置),如果要增加新的参数,新的参数必须设有默认值!6.继承抽象类后必须将抽象类设置的抽象方法全部设置!7.继承抽象类后,定义的抽象类方法访问权限不能小于抽象类中的设置。*/


以上就是本次分享内容,如果有什么错误的位置希望发表评论给我个提醒,为了改变世界,我们在编程的路上不断前行。尴尬的事就是,第一次发莫名代码丢了,莫名尴尬。

原创粉丝点击