1203课程作业
demo1
<?php
//oop基本步骤
//1、创建类
class Demo1
{
//2、添加类成员
//在类中的变量和函数,和程序中的变量和函数有区别,添加了访问限制
//变量=>属性,函数=>方法,访问限制符 成员
//创建属性
public $site = 'php中文网';
//创建方法:输出当前类的属性$site
public function getSite()
{
// 第一步:类的实例化
$obj = new Demo1;
// 第二步返回类属性
return $obj->site.'欢迎您';
}
}
//3、访问类成员
$obj = new Demo1;
//访问属性:对象成员访问符:->
echo $obj->site.'<br>';
echo $obj->getSite();
demo2
<?php
//1、创建类
class Demo2
{
//2、添加类成员
public $site = 'php中文网';
public $role = '讲师';
public function getSite()
{
// 第一步:类的实例化 self类名的引用,始终与当前类名绑定
// $obj = new self;
// 第二步返回类属性
return $this->site.'欢迎您';
}
public function getRole()
{
// 第一步:类的实例化
// $obj = new self;
// 第二步返回类属性
// $this是当前类的实例引用,始终与当前类的实例绑定
return $this->role;
}
}
//3、访问类成员
$obj = new Demo2();//函数调用
//访问属性:对象成员访问符:->
echo $obj->site.'<br>';
echo $obj->getRole();
demo3
<?php
//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;
// 3.添加类实例成员
// $obj->site = $this->site;
// $obj->role = $$this->role;
// 在类实例化时自动会执行
echo $this->getInfo();
//4.返回类实例
// return $obj;
}
}
//3、访问类成员
new Demo3('php中文网','讲师');
demo4
<?php
//访问控制,实现类的封装
//1、创建类
class Demo4
{
//2、添加类成员
//private $name = 'yangkai';
public $site;
// 如果不想让属性在类的外部被访问,可以将该属性的访问控制改为:private、protected
protected $role;
public function getInfo()
{
return '我是' . $this->site . $this->role;
}
// 构造方法:
public function __construct($site, $role)
{
$this->site = $site;
$this->role = $role;
}
// 外部无权访问,是为了防止非法访问,而不是禁止访问
//为这样的属性创建一个访问器方法,来过滤用户的访问请求
public function __get($name)
{
// 仅允许用户名是admin的用户访问,其他访问返回,无权访问
$username = $_GET['username'] ?? '';
if (isset($username) && $username === 'admin') {
return isset($this->$name) ? $this->$name : '属性未定义';
} else {
return '无权访问';
}
}
// public function getName()
// {
// return isset($this->name) ? $this->name : '不存在该属性';
// }
// 魔术方法:__get($name)属性重载
}
//3、访问类成员
$obj = new Demo4('www.php.cn', '讲师');
echo $obj->name;
//echo $obj->role . '<br>';
//echo $obj->getRole();
echo '<br>';
//echo $obj->getName();
//__get($name),__set($name,$vaule),__isset($name),__unset($name) 属性重载
demo5
<?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::__construct($site, $role);
$this->course=$course;
}
// 重写父类的方法
public function getInfo()
{
return parent::getInfo().',负责的课程是:'.$this->course;
}
}
//3、访问类成员
$sub = new Demo5_1('www.php.cn','木易','php');
echo $sub->getInfo();
demo6
<?php
//trait:代码复用方式,用来扩展当前类的功能
//trait当成一个公共方法库
//trait使用了类的定义语法,但是不是类,不可以实例化
trait Test
{
public function getInfo()
{
return '我是' . $this->site . '讲师:' . $this->role;
}
}
//1、创建类
//宿主类
class Demo6
{
//导入trait类库
use Test;
//2、添加类成员
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 $course;
public function __construct($site, $role,$course)
{
parent::__construct($site, $role);
$this->course=$course;
}
// 重写父类的方法
public function getInfo()
{
return parent::getInfo().',负责的课程是:'.$this->course;
}
}
// 优先级:当前类中的同名方法>trait类中的同名方法>父类中的同名方法
//3、访问类成员
$obj = new Demo6('php.cn','muyi');
echo $obj->getInfo();
echo '<br>';
$obj = new Demo6_1('www.baidu.com','木易','讲师');
echo $obj->getInfo();
//$sub = new Demo5_1('www.php.cn','木易','php');
//echo $sub->getInfo();
demo7
<?php
//接口
//对象的模板是类,类的模板是接口
//面向接口编程是最重要的编程思想之一,许多高级应用严重依赖于它
//接口是一种约定,定义了实现它的类 中必须实现的方法
//接口中没有方法的具体实现,所以不可以实例化
//接口中定义工作类的方法原型
interface iDemo
{
//接口方法
public function getInfo();
public function hello();
}
//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 __construct($site, $role)
{
$this->site = $site;
$this->role = $role;
}
}
//3、访问类成员
$obj =new Demo7('php.cn','muyi');
echo $obj->getInfo().'<br>';
echo $obj->hello().'<br>';
demo8
<?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('php.cn','木易');
echo $obj->getInfo().'<br>';
echo $obj->hello().'<br>';
手抄作业
总结
1、创建类
2、添加类成员
3、访问类成员