面向对象三大特性

封装

  • public:公开的,类内部,类外部以及子类都可访问。
  • protected:受保护的,类内部和子类可访问。
  • private:私有的,仅类内部使用。

访问控制修饰符

  • 如何访问受保护(protected)变量和私有(private)变量?使用一个public函数。set和get函数!!!
  • 如果一个方法没有访问修饰符,默认是public的
  • 属性必须指定访问修饰符。
  • 成员方法之间可以互相调用,但是需要使用this指针
		public function showInfo(){
			echo $this->name." ".$this->sex." ".$this->age."<br/>";
		}
		public  function result(){
			//调用其他成员方法
			$this->showInfo();
		}

继承

  • 当多个类存在相同的属性和方法时,可以将这些属性和方法从类中抽象出来,作为父类,所有的子类无需重新定义,只需通过基本语法使用。
  • 子类最多继承一个父类。如果希望继承多个类的属性和方法,采用多层继承。
  • 在创建某个子类对象的时候,默认情况下不会自动调用其父类的构造函数
  • 如果子类中需要访问其父类的方法(修饰符是public或者pprotected),可以使用父类::方法名或者parent::方法名来完成。
  • 如果子类中某个方法和父类某个方法相同,称为方法重写/覆盖。
  • 基本语法:
class 子类名 extends 父类名{
	...
}

方法重载

  • 重载的含义:函数名相同,参数类型或者参数个数不同,从而区分不同的函数。但php不支持。
  • 使用“魔术”函数__call来实现方法重载。
  • __call:当对象调用某个方法,而该方法不存在时,则系统自动调用__call
  • 简单案例
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
	class A{
		public function test1($p){
			echo "一个参数:".print_r($p)."<br/>";
		}
		public function test2($p){
			echo "两个参数".print_r($p)."<br/>";
		}
		//当对象调用某个方法,而该方法不存在时,则系统自动调用__call
		function __call($method,$p){
			if($method=="test"){
				if(count($p)==1){
					$this->test1($p);
				}else if(count($p)==2){
					$this->test2($p);
				}
			}
		}
	}
	$a=new A();
	$a->test(1);
	$a->test(2,3);
?>
</body>
</html>
  • 某些常量
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
	class A{
		public function __construct(){
			echo "<br/>".__CLASS__; //当前的类名
			echo "<br/>".__FUNCTION__; //当前的方法
		}
	}
	$a=new A();
	echo __LINE__;  //处于哪一行
	echo "<br/>".__FILE__;//页面路径:重要!!!
	echo "<br/>".__DIR__;
?>
</body>
</html>

在这里插入图片描述

方法重写/覆盖

  • 子类的某个方法和父类同名并且参数个数相同
  • 在实现方法覆盖时,当访问修饰符不同,需满足:子类的访问范围 ≥ \geq 父类的访问范围
  • 探讨:对于动物来说,每个动物都有特殊的叫声,如何实现呢?
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
	class Animal{
		public function cry(){
			echo "我不知道...<br/>";
		}
	}
	class Dog extends Animal{
		public function cry(){
			echo "汪汪...<br/>";
		}
	}
	class Pig extends Animal{
		public function cry(){
			echo "哼哼...<br/>";
		}
	}
	$dog=new Dog();
	$dog->cry();
	$pig=new Pig();
	$pig->cry();
?>
</body>
</html>

简单案例

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
</head>
<body>
<?php
	class Animal{
		public function cry(){
			echo "我不知道...<br/>";
		}
	}
	class Dog extends Animal{
		public function cry($dogCry){
			echo $dogCry."<br/>";
		}
	}
	$dog=new Dog();
	$dog->cry("汪汪");
?>
</body>
</html>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值