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 访问修饰符 继承相关推荐

  1. 韩顺平php视频笔记70 面向对象编程的三大特征1 抽象 封装

    php面向对象编程的三大特征 ① 封装 ② 继承 ③ 多态 class Account { public $blance; public $no; public function qun(){ } p ...

  2. 韩顺平php视频笔记72-74 面向对象编程的三大特征3 重载override与重写overload 魔术常量

    php中的重载感觉不是很完善 [注意]php不能以参数列表不同的形式来构成重载,构造方法同样也不行 PHP5 中如何通过魔术函数来实现方法重载的效果 代码说明 <?php class  A{ p ...

  3. 面向对象编程及其三大特征(JAVA)

    面向对象编程及其三大特征(JAVA) 一.面向对象编程介绍: 面向过程与面向对象: 面向对象的本质: 二.面向对象编程的三大特征: 封装: 封装的概念: 封装的优点: 封装举例(Person类) 继承 ...

  4. 面向对象编程的三大特征

    面向对象编程的三大特征:封装.继承.多态 一:封装 对于封装而言,一个对象它所封装的是自己的属性和方法,所以他是不需要依赖其他对象就可以完成自己的操作. 封装的三大好处: 1.良好的封装能够减少耦合. ...

  5. 韩顺平php视频笔记75-76 抽象类 接口

    抽象 为什么设计抽象类这个技术? 1. 在实际开发中,我们可能有这样一种类,是其它类的父类,但是它本身并不需要实例化,主要用途是用于让子类来继承,这样可以到达代码复用. 同时利于项目设计者,设计类. ...

  6. 韩顺平php视频笔记69 静态变量与静态方法

    静态变量(类变量)与静态方法(类方法) 思路: 1. 使用全局变量 * 什么是全局变量, 在程序中,都可以使用的变量称为全局变量. 当我们了解全局变量后,我们来看看如何解决问题? <?php / ...

  7. 韩顺平php视频笔记62-67 php面向对象

    内存图 对比:值传递 小练习 如果给一个函数传递一个对象,实际传递的是一个地址 对比 } 进度: __construct()构造方法是php5新增的 this内存解析 this小结 注意:php构造方 ...

  8. 韩顺平php视频笔记83-87 防盗链 $_SERVER http协议相关 文件相关

    第83集略(内容之前讲过) http协议 1. http协议是建立在  tcp/ip协议基础上. 2. 我们的web开发数据的传输都是依赖于http协议. 3. http协议全称是 超文本传输协议 h ...

  9. 韩顺平php视频笔记46 函数入门

    1函数概念 自定义:自己写的函数  系统函数:系统写好的 2函数作用 案例: funcs.php <?php //1function是一个关键字//2jiSuan是函数名//$num1,$num ...

最新文章

  1. python注入_python的常见命令注入威胁
  2. mysql全量备份与增量备份_Mysql增量备份与全量备份
  3. djanjo 使用a标签跳转_django页面跳转怎么写
  4. 一步步学习微软InfoPath2010和SP2010--第十三章节--SharePoint视图和仪表板(9)--基于表单库的仪表板...
  5. HTML+CSS+JS面试题(附带答案)
  6. pytorch-LSTM的输入和输出尺寸
  7. 深度解析数据湖存储方案Lakehouse架构
  8. 冲上热搜!快手宣布取消大小周
  9. 常系数线性微分方程的直接解法-利用特征方程
  10. Python使用两个Event对象同步生产者消费者问题
  11. 我的webpack学习笔记(一)
  12. python大师_GitHub - lltx/Python-100-Days: Python - 100天从新手到大师
  13. 第 11 章 Harddisk
  14. php mysql可以跨站_Laravel5中防止XSS跨站攻击的方法
  15. pads单位切换的快捷键_PADS常用快捷键和一些技巧
  16. Android-自定义preference和PreferenceFragment实例详解
  17. (01)ORB-SLAM2源码无死角解析-(58) 闭环线程→计算Sim3: 源码Sim3Solver::iterate()讲解
  18. 测试必会Linux命令
  19. (精)Tableau数据可视化设计 实验报告
  20. 数据结构 python的书推荐-学习数据结构,有哪些值得推荐的好书?

热门文章

  1. appium常用参数(一)
  2. python调用远程chromedriver.exe、selenium抓包方法
  3. Luogu P2066 机器分配(dp)
  4. [设计模式] javascript 之 策略模式
  5. 总结几种结构体初始化方法 (转)
  6. 第一次HACK别人的DLL
  7. android 方法统计,Android 利用编译时 注入 统计App内所有方法执行时常,分析ANR
  8. java 匿名接口实现_Java通过接口实现匿名类的实例代码
  9. 深搜+广搜——Lake Counting S(洛谷 P1596)
  10. SQL必知必会-约束