常用的继承过程,以及对public、private、protected修饰符的理解:
/*****************************父类********************************/ /** * person父类 */ class person { public $name; //共有属性在类的里面和外面都可以被访问,可以被子类继承 public $age; public $sex; protected $myprotect; //受保护属性,不能被外部访问,只能在类里面被访问,以及继承了本类的子类可以访问 private $myprivate; //私有属性,只能被本类的内部访问,不能被外部访问,也不能被子类继承访问 public static $mystaticObj; //全局静态变量,直接通过类方法访问 /** * 构造方法 */ function __construct($name,$age,$sex) { $this->name = $name; $this->age = $age; $this->sex = $sex; $this->myprotect = "myprotect"; $this->myprivate = "myprivate"; } /** * 共有实例方法,可以被类的里面和外面访问,并且可以子类继承重写 */ public function personInfo() { echo "姓名:".$this->name."\n"."年龄:".$this->age."\n"."性别:".$this->sex."\n"."myprotect:".$this->myprotect."\n"."myprivate:".$this->myprivate; } /** * 私有实例方法,可以被类的里面访问,但不能被类的外面访问,也不能被子类继承访问 */ private function mysecret() { echo "这是我的秘密,不能告诉你"; } /** * 受保护实例方法,可以被类的里面访问,也可以被子类访问,但不能被类的外面访问 */ protected function myprotectfun() { echo "这是我的myprotectfun方法"; } public static function share() { echo "静态方法,直接通过类名调用"; } function __destruct() { echo "god damn,I die"; } } /*****************************子类********************************/ /** * 继承自person的子类 */ class student extends person { public $grade; function __construct($name,$age,$sex,$grade) { parent::__construct($name,$age,$sex); $this->grade = $grade; } public function personInfo() { parent::personInfo(); echo "\n"."grade:".$this->grade."\n"; /* 结果: 姓名:klp 年龄:24 性别:male myprotect:myprotect myprivate:myprivate grade:six 这是我的子类myprotectfun方法 */ $this->myprotectfun(); } protected function myprotectfun() { echo "这是我的子类myprotectfun方法"; } public static function share() { echo "子类静态方法,直接通过类名调用"; } } // $obj = new person("klp","26","male"); // $obj->personInfo(); // $obj->myprotect; 报错:Fatal error: Cannot access protected property person::$myprotect // $obj->mysecret(); /*报错:Fatal error: Call to private method person::mysecret() from context*/ // person::share(); /*静态方法,直接通过类名调用*/ $stu = new student("klp","24","male","six"); $stu->personInfo(); $stu->myprivate; /*返回为空,但是不会报错*/ student::share(); /*子类静态方法,直接通过类名调用*/
时间: 2024-11-01 16:19:13