登录  /  注册
博主信息
博文 8
粉丝 0
评论 1
访问量 4076
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
12-3 面向对象九期线上班
介子
原创
535人浏览过

实例

<?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>';

运行实例 »

点击 "运行实例" 按钮查看在线实例

222.jpg

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:全部完成
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学