Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:全部完成
<?php echo '<meta charset=utf-8>'; //demo1 oop基本步骤 //1创建类 class Demo1 { //2.添加类成员 //在类中的变量和函数,和程序中的变量和函数有所区别,添加了访问限制符 //变量=>属性 函数=> 方法 访问限制符限制成员访问 //创建属性 public $site='php中文网'; //创建方法:输出当前类的public属性$site public function getSite(){ //第一步类的实例化 return $this->site.'欢迎您~~'; } } //3 访问类成员 $obj = new Demo1; //访问属性 对象成员访问符:-> echo $obj->site.'<br>'; echo $obj->getSite(); //demo2 //创建类 class Demo2 { //2.添加类成员 public $site = 'php中文网'; public $role = '讲师'; public function getSite() { //第一步:类的实例化 self 是类名的引用 始终与当前的类名绑定 //$obj = new self; //第二步 :返回类属性 return $this->site.'欢迎您~~'; } } //访问类成员 $obj = new Demo2();//函数调用 //访问属性 :对象成员访问符:-> echo $obj->$site.'<br>'; echo $obj->getRole().'<br>'; //demo3 //构造函数内部干了神魔事 //1 创建类 class Demo3 { //2 添加类成员 public $site; public $role; public function getinfo() { return '我是:'.$this->site.$this->role; } //构造方法 1 类的实例化 2 自动完成 在类实例创建过程中的操作 public function __construct($site,$role) { //1.初始化类成员 $this->site = $site; $this->role = $role; //2 创建类实例 //$obj = new self; //添加类实力成员 //$obj->site = $this->site; //$obj->role = $this->role; //4 返回类实例 //return $obj; echo $this->getinfo(); } } //3 访问类成员 new Demo3('php中文网','Lecture'); //demo 4 //访问控制实现类的封装 //1 创建类 class Demo4 { //2 添加类成员 public $site; //private $name = 'Peter Zhu'; //如果不想让该属性子类外部访问可以将该属性访问控制符为:private 私有成员 protected 受保护成员 //privae $role; protected $role; private $name; private $age; public function __construct() { $this->name = 'jzsmile'; $this->age = 20; } // public function getinfo() // { // return '我是:'.$this->site.$this->role; // } // //构造方法 // public function __construct($site,$role) // { // $this->site=$site; // $this->role=$role; // } // //外部无权访问比那个不是外部不能访问而是防止非法访问 // //为外部不能访问的属性 创建一个访问器方法 来过滤用户的访问请求 // public funcion getRole() // { // //仅允许用户名为admin的用户访问 启发访问返回 :无权访问 // $username = $_GET['username']; // if(isset($username) && $username == 'admin'){ // return $this->role; // }else{ // return '无权访问'; // } // } // public function getName() // { // return isset($this->name) ? $this->name:'不存在该属性'; // } // //魔术方法__get($name),属性重载 // private function __get($value)//__get() __set() 这两个方法 都是为了调用私有属性 set 为私有属性设置值 需要两参数一个属性名 一个值 get 获得私有属性值 需要属性名 使我们访问私有属性像访问共有属性一样 只不过载函数中加了一些过滤条件 // { // echo $this->$value; // } // private function __set($key,$value){ // $this->$key = $value; // } private function __isset($value) { return isset($this->$value); } private function __unset($value){ if($value != 'name'){ echo 'aaa'; // echo $this->$value; unset($this->$value); // echo '$a='.$a; } } } $a =new Demo4(); // $a->name = '66666'; // echo $a->name; var_dump(isset($a->age));//isset 函数判断变量是否存在但是当我们把属性设置为私有属性时外部无法访问变量就会出错 而我们可以通过__isset()来实现 外部无感isset判断 变量是否存在 只要__isset 返回true 就可以 我们也可以在其内部加判断决定哪些私有变量可以在外部知道 unset($a->age); var_dump(isset($a->age)); // echo $a->age; // $b = 10; // unset($b); // echo $b; // if($a->name){ // echo '这个isset'; // } //demo5类的继承 //1 创建类 class Demo5 { //2 添加类成员 public $site; protected $role; public function getinfo(){ return '我是'.$this->site.'学生:'.$this->role; } //构造方法 public function __construct($site,$role) { $this->site = $site; $this->role = $role; } } class Demo5_1 extends Demo5{ //当前子类自身属性 private $course; public function __construct($site,$role,$course) { //parent:: 调用父类中成员 parent::__construct($site,$role); $this->course = $course; }//重写父类方法 public function getinfo() { return parent::getinfo().'学习的课程是:'.$this->course; } } //访问类成员 $sub = new Demo5_1('php.cn','jzsmile','php'); echo $sub->getinfo(); //demo6 trait 代码复用 //trait:代码复用方式 用来扩展 当前类功能 //trait: 当作一个公共方法库 //trait:使用了类的定义与法 但不是类不能实例化 //因为php单继承的特性无法从两个基类中继承属性和方法 为了解决这个问题php 推出trai特性 //用法:通过在类中使用use关键字 声明要组合的trait名称,具体trait声明使用trait关键字 trait不是类不能实例化 // trait Dog { // public $name = 'dog'; // public function bark(){ // echo 'This is a dog'; // } // } // class Animal{ // public function eat(){ // echo 'this is animal eat'; // } // } // class Cat extends Animal{ // use Dog; // public function drive(){ // echo 'This is cat drive'; // } // } // $cat = new Cat(); // $cat->drive(); // echo "<br>"; // $cat->eat(); // echo "<br>"; // $cat->bark(); //trait 基类子类优先级 为 子类本身 > trait > 基类 // trait Dog { // public $name = 'dog'; // public function bark() // { // echo 'This is a dog'; // } // public function eat() // { // echo 'this is Dog eat'; // } // } // class Animal // { // public function eat() // { // echo 'this is animal eat'; // } // public function bark() // { // echo 'This is animal dog'; // } // } // class Cat extends Animal // { // use Dog; // public function eat() // { // echo 'This is Cat drive'; // } // } // $cat = new Cat(); // $cat->eat(); // $cat->bark(); // trait 文章 后续还有多trait利用但是我感觉还没用上先不急https://www.jianshu.com/p/fc053b2d7fd1 //demo 7 //接口 //类是对象的模板 接口是类的模板 //面向接口编程 是最重要的编程思想之一 许多高级应用都依赖于他 //接口是一种约定 定义了实现他的类中必须实现的方法 //接口没有方法的具体实现 所以不能实例化 //接口:定义工作类的原型 interface id3_remove_tag { //接口方法 public function getinfo(); public function hello(); } //创建类 class Demo7 implements iDemo//implements 表示 该类使用该接口 一个泪也可以使用多个接口 { //2 添加类成员 public $site; protected $role; public function getinfo() { return '我是'.$this->site.'学生'.$this->role; } public function hello{ return '大家晚上吃饱了吗'; } //构造方法 public function __construct($site,$role) { $this->site = $site; $this->role = $eole; } } //访问类成员 $obj = new Demo7('php中文网','jzsmile') echo $obj->getinfo().'<br>'; echo $obj->hello().'<br>'; //demo8抽象类 //抽象类:有抽象方法 也有已实现的方法 按老师的说法接口是大规划 抽象类是项目经理在大规划下 实现了几个具体方法 //接口全是抽象方法 我认为接口就是抽象到底的抽象方法 //共同之处:统统不能实例化 原因是内部都有抽象方法 abstract class chouxiang { //抽象方法 abstract public function getinfo(); //已实现方法 public function hello() { return '大家晚上吃饱了吗'; } } //1创建类 //demo8 工作类 abstract class chouxiang { //抽象方法 abstract public function getinfo(); //已实现方法 public function hello() { return '大家晚上吃饱了吗'; } } //1创建类 //demo8 工作类 class Demo8 extends chouxiang { public $site; protected $role; public function getinfo() { return '我是'.$this->site.'学生'.$this->role; } public function hello() { return '大家晚上吃了吗'; } //构造方法 public function __construct($site,$role) { $this->site = $site; $this->role = $eole; } } //3 访问类成员 $obj = new Demo8('php中文网','jzsmile'); echo $obj->getinfo().'<br>'; echo $obj->hello().'<br>';
点击 "运行实例" 按钮查看在线实例