作业一
作业二
<?php
//oop基本编程步骤
//1、创建类
class Demo1
{
//2、添加类成员
//在类中的变量和函数,和成渝中的变量函数有区别,添加了访问限制符
//变量=》属性,函数=》方法, 访问限制符 成员
public $site = 'phpstorm';
//创建方法: 输出当前类的属性$site
public function getSie()
{
// 1、第一步: 类的实例化
$obj = new Demo1();
// 2、第二步: 返回类属性
return $obj ->site . '快来使用';
}
}
//3、访问类成员
$obj =new Demo1();
//访问属性: 对象成员访问符:->
echo $obj->site.'</br>';
echo $obj->getSie();
<?php
class Demo2
{
public $site = '中文表层';
public $role = '讲师';
public function getSite()
{
// 1、实例化对象
$obj = new self;
return $obj->site . '感谢使用';
// 2、放回类属性
}
public function getRole()
{
// $obj = new self;
return $this->role;
}
}
$obj = new Demo2();
echo $obj->site.'<br>';
//echo $obj->getSite();
echo $obj->getRole();
<?php
class Demo3
{
//类成员
public $site;
public $role;
public function getInfo()
{
return '我是:'.$this->role.$this->role;
}
// 构造方法:
// 1、类实例的初始化;2、制动完成在类实例创建过程中的操作
public function __construct($site,$role)
{
// 1、初始化类成员
$this->site = $site;
$this->role = $role;
// 2、创建类实例
// $obj = new self;
// 3、添加类实例成员
// $obj->site = $this->site;
// $obj->role = $this->role;
// 在类实例化是会自动执行
echo $this->getInfo();
// 4、返回类实例
// return $obj;
}
}
$obj = new Demo3('中文网','Lecture');
<?php
//访问控制,实现类的封装
class Demo4
{
// 添加成员
public $site;
// private $name = 'pterSer';
//如果不想该属性在类的外部访问,可以将该属性的访问控制符修改为:
// protected 、 private
// public $role;
protected $role;
public function getInfo()
{
return '我是:'.$this->site.$this->role;
}
public function __construct($site,$role)
{
$this->site = $site;
$this->role = $role;
}
//外部无权访问,是为了防止非法访问,并代表禁止访问
// 为这样的属性创建一个访问器方法,来过滤要不过户的访问轻松
/*public function getRoe()
{
//允许用户名是‘admin’的用户访问,其他访问返回: 无权访问
$username = $_GET['username'] ?? '';
if(isset($username) && $username ==='admin')
{
return $this->role;
} else {
echo '无权访问';
}
}
public function getName()
{
return isset($this->name) ? $this->name : '不存在该属性';
}*/
//魔术方式: __get($name) ,属性重载
// 访问不存在的成员属性可以使用,省去为成员 重新定的方法
public function __get($name)
{
$username = $_GET['username'] ?? '';
if(isset($username) && $username === 'admin')
{
return isset($this->$name) ? $this->$name : '属性未定义';
} else {
return '无权访问';
}
}
}
//访问类成员
$obj = new Demo4('www.baidu.com','引擎');
echo $obj ->role.'<br>';
//使用访问器方法
//echo $obj->getRoe();
echo '<hr>';
//echo $obj->getName();
echo $obj->name;
<?php
//类的继承
//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;
}
}
//3、访问类成员
$sub = new Demo5_1('baidu.com','朱老师','PHP');
echo $sub->getInfo();
<?php
//trait: 代码复用方式,用来扩用当前类的功能
//trait: 当一个公共方法库
//trait: 使用了类的定义语法,但不是类,所以不能实例化
trait Test
{
public function getInfo()
{
return '我是:'.$this->site .'讲师'.$this->role;
}
}
//创建类
class Demo6
{
// 导入trait类库
use Test;
public $site;
protected $role;
// public function getInfo()
// {
// return '我是:'.$this->site .$this->role;
// }
public function __construct($site,$role)
{
$this->site = $site;
$this->role = $role;
}
}
//trait: 还可以用在类的上下文环境中
class Demo6_1 extends Demo6
{
private $counstr;
public function __construct($site,$role,$counstr)
{
parent::__construct($site,$role);
return $this->counstr = $counstr;
}
// 从写父类
public function getInfo()
{
return parent::getInfo().',我负责是:'.$this->counstr;
}
}
//优先级: 当前类中的同名方法 > trait ,类中的同名方法 > 父类中的同名方法
//3、 访问类成员
$obj = new Demo6('百度搜索','PeterZhu','sdf');
echo $obj->getInfo();
echo '<hr>';
$sub = new Demo6_1('百度搜索','PeterZhu','sdf');
echo $sub->getInfo();
<?php
//接口:
//对象的模板就是类,类的对象时接口
//面向接口编程时最重要的思想编程之一,许多高级应用都是严重依赖与它
//接口是一种预定,定义了实现它的类中必须实现的方法
//接口中没有方法的具体实现,所以不能实例化
interface iDemo
{
//接口中有常量,
// 接口方法
public function getInfo();
public function hello();
public function Name();
}
//1、创建类
class Demo7 implements iDemo
{
//2、添加成员
public $site;
protected $role;
public function getInfo()
{
return '我是:'.$this->site.'讲师'.$this->role;
}
public function hello()
{
return 'Hello 大家今天学习了?';
}
public function Name()
{
return $this->site.'今天休息'.$this->role;
}
//构造方法
public function __construct($site,$role)
{
$this->site = $site;
$this->role = $role;
}
}
//3、访问类成员
$obj = new Demo7('baidu','祝好是');
echo $obj->getInfo().'<br>';
echo $obj->hello().'<br>';
echo $obj->Name();
<?php
//抽象类:
//抽象:有抽象方法,也有实现的方法
//接口中全是抽象方法
//共同之处: 统统不能实例化,原因是内部有抽象方法
abstract class Chouxiang
{
//抽象方法
abstract public function getInfo();
//已实现方法
public function hello()
{
return 'Hello 大家今天学习了?';
}
}
//1、创建类
class Demo8 extends Chouxiang
{
//2、添加成员
public $site;
protected $role;
public function getInfo()
{
return '我是:'.$this->site.'讲师'.$this->role;
}
// 构造方法
public function __construct($site,$role)
{
$this->site = $site;
$this->role =$role;
}
}
//3、访问类成员
$obj = new Demo8('百度搜索','全站搜索');
echo $obj->getInfo().'<br>';
echo $obj->hello();
echo $obj->Name();
总结
1、三大步骤, 创建类 、 添加成员、 访问成员
2、构造方法,实例化对象后 new(’name’,’age’,’sex’);必须传参
3、在子类中可以继承extend,可以重写父类方法,Trait可以复制复用方法!
4、接口中出现的方法必须实现和继承, 抽象就是给其他方法继承的!都不能实例化