韩顺平php视频笔记71 面向对象编程的三大特征2 访问修饰符 继承
php提供了三种访问控制符号.
有三种
1. public 表示全局,可以在本类,类外部,子类 中使用
2. protected 表示受到保护, 可以在本类, 子类中使用
3. private 表示私有, 只能在本类使用
这三个控制修饰符号可以对 属性 和 方法修饰
1. 如果一个方法没有访问修饰符,则默认是public
2. 属性 必须指定访问修饰符
☞ 方法之间可以互相调用. 但是需要使用 $this引用
function test11(){
$this->test12();
}
protected function test12(){
echo "test12 hello";
}
举例说明:
class Person{
public $name;
protected $age;
private $salary;
function __construct($name,$age,$salary){
$this->name=$name;
$this->age=$age;
$this->salary=$salary;
}
//成员方法
function showInfo(){
//这里说明在本类中可以使用 public protected 和private 修饰的变量.
echo $this->name."||".$this->age."||".$this->salary;
}
}
//创建一个人
$p1=new Person("孙悟空",30,1000);
echo $p1->name; //可以
echo $p1->age;//报错
echo $p1->salary;//报错.
?我们现在就想去访问protected 变量或者 private 变量, 通常的做法是提供 public 函数去访问 这些变量. 形式是
public function setXxx($val){
}
public function getXxx(){
}
public function showInfo(){
}
public protected private 可以修饰属性和方法
(1) 查看 薪水 (private )
//获取这个人的薪水
public function getSalary($user,$pass){
if($user=="shunping" && $pass="123"){
return $this->salary;
}else{
return "sorry,你无法看";
}
}
(2) 修改人的年龄
提供了两个函数.
//修改年龄,对输入的值,进行校验.
public function setAge($age){
if($age>1 && $age<120){
$this->age=$age;
}else {
echo "年龄范围不对";
}
}
//查看年龄
public function getAge(){
return $this->age;
}
还有一种形式, 通过 一对 __set 和 __get方法来操作我们的变量,不推荐.
class A{
private $n1;
private $n2;
private $n3;
//使用__set 方法来管理所有的属性
public function __set($pro_name,$pro_val){
$this->pro_name=$pro_val;
}
//使用__get 可以获取所有的属性值
public function __get($pro_name){
if(isset($pro_name)){
return $this->pro_name;
}else{
return null;
}
}
}
$a1=new A();
$a1->n1="hello";
echo $a1->n1;
$a1->n2=890;
echo "||".$a1->n2;
不推荐的理由:1给人的感觉:破坏了封装性2对所有属性都统一操作,无法对某些属性进行单独限制
可以直接写一个方法来操作private,protected变量
class Peron{
protected n1;
private $n2;
function showInfo($n1){
$this->n1=$n1;
echo $this->n1.”||”$this->n2;
}
}
-------------------------------------------------------------------------------------------------------------------------------------
继承:---php与java一样都是单重继承,可以通过a entends b,b extends c来实现多次继承(多重继承可能导致重名的方法)
继承可以提高代码的复用性
为什么需要继承
//应用场景 开发一套学生管理系统(Pupil, Graduate , ...)
//小学生类
class Pupil{
public $name;
protected $age;
protected $grade;
public function showInfo(){
echo $this->name."||".$this->age;
}
public function tesing(){
echo " 小学生考试..";
}
}
//研究生类
class Graduate{
public $name;
protected $age;
protected $grade;
public function showInfo(){
echo $this->name."||".$this->age;
}
public function tesing(){
echo "研究生考试..";
}
}
从上面的代码我们看出,代码的复用性不高,同时也会让管理代码成本增高.
è 解决之道(继承);
现在我们使用继承对上面的代码,进行改写.
代码:
//应用场景 开发一套学生管理系统(Pupil, Graduate , ...)
//父类
class Stu{
public $name;
protected $age;
protected $grade;
public function showInfo(){
echo $this->name;
}
}
//子类
class Pupil extends Stu{
public function testing(){
echo " 小学生考试..";
}
}
class Graduate extends Stu{
public function testing(){
echo "研究生考试..";
}
}
//创建学生
$stu1=new Pupil();
$stu1->name="小明";
$stu1->testing();
$stu1->showInfo();
//创建一个研究生
$stu2=new Graduate();
$stu2->name="老明";
$stu2->testing();
$stu2->showInfo();
☞ 从上面的代码我们可以看出:
所谓继承就是 一个子类 通过 extends 父类 把父类的 (public / protected)属性和(public / protected)方法继承下来.
继承的基本语法是:
class 类名 extends 父类名{
//在写自己需要的属性和方法.
}
1. 父类的 public 、protected 的属性和方法被继承. private 的属性和方法没有被继承.
2. 一个类只能继承一个父类,(直接继承).如果你希望继承多个类的属性和方法,则使用多层继承
class A{
public $n1=90;
}
class B extends A{
public $n2="hello";
}
class C extends B{
}
$c=new C();
echo $c->n1;
3. 当创建子类对象的时候,默认情况下,不会自动调用父类的构造方法.//注意与java区别
class A{
public $n1=90;
//构造方法
public function __construct(){
echo "A __construct";
}
}
class B extends A{
function __construct(){
echo "B __construct";
}
}
//创建B对象实例
$b=new B();
4. 如果我们希望去调用父类的 构造方法,或者其它的方法(public / protected) ,可以这样处理 (了解)
4.1 类名::方法名() 4.2 parent::方法名()
举例
class A{
public $n1=90;
//构造方法
public function __construct(){
echo "A __construct";
}
}
class B extends A{
function __construct(){
echo "B __construct";
//显式的调用父类的方法
//A::__construct();
parent::__construct();
}
}
//创建B对象实例
$b=new B();
5. 当一个子类的方法和父类的方法完全一样(public protected), 我们称为 方法的覆盖 (方法重写)
找错:
韩顺平php视频笔记71 面向对象编程的三大特征2 访问修饰符 继承相关推荐
- 韩顺平php视频笔记70 面向对象编程的三大特征1 抽象 封装
php面向对象编程的三大特征 ① 封装 ② 继承 ③ 多态 class Account { public $blance; public $no; public function qun(){ } p ...
- 韩顺平php视频笔记72-74 面向对象编程的三大特征3 重载override与重写overload 魔术常量
php中的重载感觉不是很完善 [注意]php不能以参数列表不同的形式来构成重载,构造方法同样也不行 PHP5 中如何通过魔术函数来实现方法重载的效果 代码说明 <?php class A{ p ...
- 面向对象编程及其三大特征(JAVA)
面向对象编程及其三大特征(JAVA) 一.面向对象编程介绍: 面向过程与面向对象: 面向对象的本质: 二.面向对象编程的三大特征: 封装: 封装的概念: 封装的优点: 封装举例(Person类) 继承 ...
- 面向对象编程的三大特征
面向对象编程的三大特征:封装.继承.多态 一:封装 对于封装而言,一个对象它所封装的是自己的属性和方法,所以他是不需要依赖其他对象就可以完成自己的操作. 封装的三大好处: 1.良好的封装能够减少耦合. ...
- 韩顺平php视频笔记75-76 抽象类 接口
抽象 为什么设计抽象类这个技术? 1. 在实际开发中,我们可能有这样一种类,是其它类的父类,但是它本身并不需要实例化,主要用途是用于让子类来继承,这样可以到达代码复用. 同时利于项目设计者,设计类. ...
- 韩顺平php视频笔记69 静态变量与静态方法
静态变量(类变量)与静态方法(类方法) 思路: 1. 使用全局变量 * 什么是全局变量, 在程序中,都可以使用的变量称为全局变量. 当我们了解全局变量后,我们来看看如何解决问题? <?php / ...
- 韩顺平php视频笔记62-67 php面向对象
内存图 对比:值传递 小练习 如果给一个函数传递一个对象,实际传递的是一个地址 对比 } 进度: __construct()构造方法是php5新增的 this内存解析 this小结 注意:php构造方 ...
- 韩顺平php视频笔记83-87 防盗链 $_SERVER http协议相关 文件相关
第83集略(内容之前讲过) http协议 1. http协议是建立在 tcp/ip协议基础上. 2. 我们的web开发数据的传输都是依赖于http协议. 3. http协议全称是 超文本传输协议 h ...
- 韩顺平php视频笔记46 函数入门
1函数概念 自定义:自己写的函数 系统函数:系统写好的 2函数作用 案例: funcs.php <?php //1function是一个关键字//2jiSuan是函数名//$num1,$num ...
最新文章
- python注入_python的常见命令注入威胁
- mysql全量备份与增量备份_Mysql增量备份与全量备份
- djanjo 使用a标签跳转_django页面跳转怎么写
- 一步步学习微软InfoPath2010和SP2010--第十三章节--SharePoint视图和仪表板(9)--基于表单库的仪表板...
- HTML+CSS+JS面试题(附带答案)
- pytorch-LSTM的输入和输出尺寸
- 深度解析数据湖存储方案Lakehouse架构
- 冲上热搜!快手宣布取消大小周
- 常系数线性微分方程的直接解法-利用特征方程
- Python使用两个Event对象同步生产者消费者问题
- 我的webpack学习笔记(一)
- python大师_GitHub - lltx/Python-100-Days: Python - 100天从新手到大师
- 第 11 章 Harddisk
- php mysql可以跨站_Laravel5中防止XSS跨站攻击的方法
- pads单位切换的快捷键_PADS常用快捷键和一些技巧
- Android-自定义preference和PreferenceFragment实例详解
- (01)ORB-SLAM2源码无死角解析-(58) 闭环线程→计算Sim3: 源码Sim3Solver::iterate()讲解
- 测试必会Linux命令
- (精)Tableau数据可视化设计 实验报告
- 数据结构 python的书推荐-学习数据结构,有哪些值得推荐的好书?
热门文章
- appium常用参数(一)
- python调用远程chromedriver.exe、selenium抓包方法
- Luogu P2066 机器分配(dp)
- [设计模式] javascript 之 策略模式
- 总结几种结构体初始化方法 (转)
- 第一次HACK别人的DLL
- android 方法统计,Android 利用编译时 注入 统计App内所有方法执行时常,分析ANR
- java 匿名接口实现_Java通过接口实现匿名类的实例代码
- 深搜+广搜——Lake Counting S(洛谷 P1596)
- SQL必知必会-约束