常用的继承过程,以及对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(); /*子类静态方法,直接通过类名调用*/

最新文章

  1. BarTender如何将条码下的数字嵌入到条码中
  2. WCF初探-3:WCF消息交换模式之单向模式
  3. c语言使用zlib实现文本字符的gzip压缩与gzip解压缩
  4. VBS数组函数学习实例分析
  5. 从 Auto Layout 的布局算法谈性能
  6. 利用putty实现文件在linux上传和下载
  7. Object-C — KVC
  8. block为什么要用copy,runtime的简单使用
  9. onvif规范的实现:server端Discovery实现,通过OnvifTestTool12.06测试
  10. spring postconstruct
  11. 怎么用CIFilter给图片加上各种各样的滤镜_1
  12. java常见的输入和输出流案例研究(一个)
  13. 树形dp专辑
  14. kali linux 更新软件源,安装中文输入法,修复Linux与windows引导菜单解决windows引导丢失
  15. Python 第五天
  16. iframe自适应高度???
  17. Django_xamdin安装与使用
  18. 挑战常规--为什么不应该使用Jsonp进行跨域
  19. JDK动态代理(3)--------动态代理具体实现
  20. github上的面试库

热门文章

  1. Vue.js(2)- 过滤器
  2. EXCEL排序(hdu 1862)
  3. DevOps专题|Packer使用教程
  4. Map—数据结构
  5. 关于Vue element-ui中诡异问题的解决思路
  6. JS实现时间选择器
  7. JAVA多线程的基础
  8. adaboost 基于错误提升分类器
  9. VUE- 访问服务器端数据 Vue-resource
  10. PAT Advanced 1064 Complete Binary Search Tree (30) [⼆叉查找树BST]