1.类访问控制
按访问权限分类
序号 | 名称 | 关键字 | 类外部 | 类内部 | 类继承上下文 | 描述 |
---|---|---|---|---|---|---|
1 | 公开成员 | public |
允许 | 允许 | 允许 | 默认 |
2 | 受保护成员 | protected |
禁止 | 允许 | 允许 | 封装 |
3 | 私有成员 | private |
禁止 | 允许 | 禁止 | 封装 |
1 public、类继承
1.1public
这个就是没有限制的,公有的
1.1.1代码演示
<?php
//public公共的
class Person{
public $name = 'misszhu'; //此处不定义默认值,那么默认是空null
public $age = 18;
public function say() {
echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
}
}
$misszhu = new Person();
// $misszhu -> name='misszhang';//public这种情况下名字是可以去更改的
//echo $misszhu -> say();
//在public下$name/$age都是可以在外部更改的
$misszhu -> name='misszhang';
$misszhu -> age='21';
echo $misszhu -> say();
1.2类继承
- 这时候的类继承是没有显示的
1.2.1代码演示
<?php
//类的继承
//子类共享父类的属性和方法(protected/public)
//php中只支持单继承
class Person{
public $name; //此处不定义默认值,那么默认是空null
public $age;
public function __construct($name, $age)
{
$this->name=$name;
$this->age=$age;
}
public function say()
{
echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
}
public function demo()
{
echo '这里是demo';
}
}
class Chiness extends Person{
protected $sex;
public function __construct($name, $age, $sex)
{
$this->name=$name;
$this->age=$age;
$this->sex=$sex;
}
//也是可以重写的
}
$misszhu = new Chiness($name='misszhang', $age='19', $sex='女');
$misszhu -> say();
var_dump($misszhu);
1.2.2演示截图
2 protected、类继承
2.1protected
<?php
//protected:受保护的
class Person{
public $name = 'misszhu'; //此处不定义默认值,那么默认是空null
protected $age = 18;
public function say() {
echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
}
}
$misszhu = new Person();
$misszhu -> name='misszhang';//public这种情况下名字是可以去更改的
$misszhu -> age='28';//受保护的外部不能更改,会报错
$misszhu -> say();
2.1.2演示截图
2.2.1 类继承
<?php
//类的继承
//子类共享父类的属性和方法(protected/public)
//php中只支持单继承
class Person{
public $name='misszhu'; //此处不定义默认值,那么默认是空null
protected $age='18';
public function say()
{
echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
}
public function demo()
{
echo '这里是demo';
}
}
class Chiness extends Person{
}
$misszhu = new Chiness();
//$misszhu -> age = 21;
//$misszhu -> eat();
$misszhu -> say();
2.2.2演示截图
<?php
//类的继承
//子类共享父类的属性和方法(protected/public)
//php中只支持单继承
class Person{
public $name='misszhu'; //此处不定义默认值,那么默认是空null
protected $age='18';
public function say()
{
echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
}
public function demo()
{
echo '这里是demo';
}
}
class Chiness extends Person{
}
$misszhu = new Chiness();
$misszhu -> age = 21;
//$misszhu -> eat();
$misszhu -> say();
2.3.2演示截图
- 演示报错说明不能在外操作
3 private、类继承
3.1代码演示
<?php
//类的继承
//子类共享父类的属性和方法(protected/public)
//php中只支持单继承
class Person{
public $name='misszhu'; //此处不定义默认值,那么默认是空null
private $age='18';
public function say()
{
echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
}
public function demo()
{
echo '这里是demo';
}
}
class Chiness extends Person{
public function eat(){
echo $this->age;
}
}
$misszhu = new Chiness();
$misszhu -> say();
3.1.1演示截图
- 证明类的内部是可以搞的
3.2.2 那么子类的内部能不能搞呢 代码演示
<?php
//类的继承
//子类共享父类的属性和方法(protected/public)
//php中只支持单继承
class Person{
public $name='misszhu'; //此处不定义默认值,那么默认是空null
private $age='18';
public function say()
{
echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
}
public function demo()
{
echo '这里是demo';
}
}
class Chiness extends Person{
public function eat(){
echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
}
}
$misszhu = new Chiness();
$misszhu -> eat();
3.3.3演示截图
- 截图表示没有报错,但是age没有继承下来,说明子类继承父类就不能继承父类私有的
抽象类的作用与实现
序号 | 名称 | 关键字 | 具体实现 |
---|---|---|---|
无 | 抽象成员 | abstract |
无 |
- 抽象类不能被实例化,同样方法也没有实现,只是提供方法声明,没有具体实现。抽象类只能作为其他类的父类使用。抽象类使用abstract关键字来声明
抽象类代码演示
<?php
abstract class Person{
abstract function chiness($name,$age,$money);
}
class Person1 extends Person{
function chiness($name,$age,$money)
{
echo "我的名字是:" . $name, "我现在是:" . $age. "岁了", "我兜兜里面有:" . $money."元";
}
}
class Person2 extends Person{
function chiness($name,$age,$money)
{
echo "我的名字是:" . $name, "我现在是:" . $age. "岁了", "我兜兜里面有:" . $money."元";
}
}
$chiness1 = new Person1();
$chiness2 = new Person2();
$chiness1->chiness('zhu老师','42','1000000');
echo '<hr/>';
$chiness2->chiness('小zhou','27','1');
抽象类演示截图
4 类的重载和调用父类方法 代码演示
<?php
class Person{
public $name = 'misszhu'; //此处不定义默认值,那么默认是空null
public $age = 42;
public function say() {
echo '我的名字是'. $this->name. '今年'. $this->age.'岁';
}
}
class Chiness extends Person{
public function sex()
{
//调用父类的方法,如果自己有方法就用自己的方法
parent::say();
}
//类的重载,你如果觉得父类的不够先进,你也可以自己重新写
public $eat='肉';
public function eat()
{
echo '我的名字是'. $this->name. '今年'. $this->age.'岁', '我的爱好是喜欢吃'.$this->eat;
}
}
$misszhu = new Chiness();
echo $misszhu -> sex();
echo '<hr>';
echo $misszhu -> eat();
4.1演示截图
5 php 接口类的使用
<?php
interface iUser {
const NAME = '接口类';
public static function myfun(); //抽象方法
}
class User extends iUser
{
protected static $name = '小zhou';
public static function myfun()
{
return $this->name.'正在学习'.iUser::NAME;
}
}
echo User::myfun();
学习总结
有点绕,很多还没有总结到