开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第一阶段:访问修饰限定符】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/711/detail/12660
访问修饰限定符
内容介绍:
一、访问修饰限定符
一、访问修饰限定符
1、目标
理解访问修饰限定符的作用,掌握访问修饰限定符的实际运用
属性或方法前面需要加一个 public 。
2、概念
访问修饰限定符:用在属性或者方法前的修饰关键字,是用来控制属性或者方法的访问位置
class Buyer{
#属性声明
# $name; # 错误,类内部属性必须使用访问修饰限定符
public $name;
# 正确:没有赋值
public $money 0;
# 正确:有赋值
#方法声明
function display(){
echo CLASS ;-
#魔术常量,输出类名
}
#类常量声明
const BIG NAME "BUYER';
}
(1)访问修饰限定符分类
①public:公有,类内和类外都可以访问
类是结构,{} 属于类外,{} 里面内容属于类外
②protected:受保护,只允许在相关类内部访问(高级部分的继承详细说明)
③private:私有,只允许在定义类内部访问
只能对大括号里面访问,方法是在类的内部,所以方法内部也属于类的内部,可以去访问私有的东西,私有的东西是为方法准备。
属性必须有访问修饰限定符,方法可以没有访问修饰限定符(默认public)
3、步骤
(1)声明类结构
(2)确定类成员
(3)确定类成员的访问位置限定,使用对应访问修饰限定符
(4)只能在对应位置访问被修饰的成员
本身在任何地方都允许对象去访问公有,如果东西有一定的安全措施,不希望被外部直接访问比较重要,外面不能随便拿东西出去私有,符合人类的思维逻辑。
4、示例
通过例子证明东西共有或者私有可以用在哪里
(1)公有成员访问
class saler{
# 属性
public $count = 100;
# 方法
public function getcount(){
echo __METHOD_;
# 魔术常量,显示当前方法名(包含类名)
}
}
#:实例化对象
$s = new saler();|
# 访问(类外)
echo $s->count;
$s->getCount();
$s->setCount();
定义 saler 的类,$count=100,方法有一个为 get 有一个为 set,都是共有意味着拿到外面都可以用
类外调用的方法在内部运行,目前方法在外部调用,前提是能被外部调用,因为为 public 能调用否则不能。
代码 03public.php:
<?php
#访问修饰限定符
class Saler{
#属性
public $count = 100;
#方法
public function getcount(){
echo _METHOD_; #魔术常量,显示当前方法名(包含类名)
}
function setcount(){
echo __METHOD_;
}
}
#实例化对象
$s = new Saler();
#访问(类外)
echo $s->count;
$s->getCount();
$s->setCount();
实例化类的对象,通过实例化公有的属性和公有的方法进行。
结果:100Saler:getCountSaler::setCount
属性、方法都在类的外面可以被访问,内部肯定能被访问。
(2)受保护和私有成员设定(当前受保护和私有一致,需要高阶知识才会有区别)
class buyer{
# 属性
protected $money = 10;
private $account ='6226000000000001';
# 方法
protected function getMoney(){
echo __METHOD_;
}
private function getAccount(){
echo __METHOD_;
}
}
定义一个 Buyer 类,$受保护,账户私有,方法受保护 getmoney,getAccount 私有,私有属性私有方法受保护的属性受保护的方法
代码:(私有)
#访问(类外)
/*echo $s->count;
$s->getCount()
$s->setCount()*/
class Buyer{
# 属性
protected $money = 10;
private $account = '6226000000000001';
#方法
protected function getMoney(){
echo _METHOD_;
}
private function getAccount(){
echo _METHOD_;
}
}
$b = new Buyer();
echo $b->money;
//结果:
Fatal error: Uncaught Error: Cannot access protected property Buyer:$money in D:\server\Web\03public.php:45 Stack trace: #0 D:\server\Web\03public.php on line 45
//不能访问当前受保护的属性,因为当前是在类的外面所有不能访问
# echo $b->money;
echo $b->account;
//结果:
Fatal error: Uncaught Error: Cannot access private property Buye:$account in D:\server’Web\03public php:46 Stack trace: #0 {m D:\server\Web\03public.php on line 46
//依旧不能在外面访问。
//受保护的和私有的都不能在外面访问。
# echo $b->money;
# echo $b->account;
$b->getMoney();
//结果:
Fatal error: Uncaught Error:Call to protected method Buyer:getMoney() from context"in D:\server\Web\03publlic. php:49 Stack D:\server\Web\03public.php on line 49
//一样的错误,把属性换成了方法,from context 说明$b->getMoney() 调用的环境不是在类的内部。
# 实例化
$b=new Buyer();
echo $b->money;
# 错误:当前属于类外部,不能访问
echo $b->account;
# 错误:当前属于类外部,不能访问
$b->getMoney();
# 错误:当前属于类外部,不能访问
$b->getAccount():
# 错误:当前属于类外部,不能访问
5.总结
(1)访问修饰限定符分为三种:public、protected 和 private,访问权限依次降低(类对成员控制权限依次增加) (pubilc 哪里都可以访问,protected 有限定的访问,private 只有当前类的内部可以访问。)
(2)访问修饰限定符限定的是成员到底在哪里能被访问,私有和受保护都只能在类内部访问,公有可以在任何地方访问(但都必须是对象去访问)
(3)属性必须写清楚访问修饰限定符,方法可以省去(不建议),因为系统默认是 public