1.基本流程
<?php
//OOP基本步骤
//1.创建类
class Demo1
{
//2.添加类成员
public $site = 'php中文网';
public function getSite()
{
$obj = new Demo1;
}
}
//3.访问类成员
$obj = new Demo1;
echo $obj->site . '<br>';
echo $obj->getSite();
2.类与实例的引用
<?php
// 1. 创建类
class Demo2
{
// 2. 添加类成员
public $site = 'php中文网';
public $role = '讲师';
public function getSite()
{
return $this->site . ' 欢迎您~~';
}
public function getRole()
{
return $this->role;
}
}
// 3. 访问类成员
$obj = new Demo2();
echo $obj->site . '<br>';
echo $obj->getRole() . '<br>';
3.构造方法
<?php
// 构造函数内部干了什么事?
// 1. 创建类
class Demo3
{
// 2. 添加类成员
public $site;
public $role;
public function getInfo()
{
return '我是: ' . $this->site . $this->role;
}
// 构造方法: 1. 类实例的初始化; 2.自动完成在类实例创建过程中的操作
public function __construct($site, $role)
{
$this->site = $site;
$this->role = $role;
echo $this->getInfo();
}
}
// 3. 访问类成员
new Demo3('PHP中文网', 'Lecture');
4.类成员的访问控制
<?php
// 访问控制,实现类的封装
// 1. 创建类
class Demo4
{
// 2. 添加类成员
public $site;
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)
{
$username = $_GET['username'] ?? '';
if (isset($username) && $username === 'admin') {
return isset($this->$name) ? $this->$name : '属性未定义';
} else {
return '无权访问';
}
}
}
// 3. 访问类成员
$obj = new Demo4('www.php.cn', '讲师');
echo $obj->role;
echo '<br>';
echo $obj->name;
5.类的继承
<?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('php.cn', '朱老师', 'php');
echo $sub->getInfo();
6.trait技术
<?php
trait Test
{
public function getInfo()
{
return '我是: ' . $this->site . '讲师: ' . $this->role;
}
}
// 1. 创建类
// Demo6: 宿主类
class Demo6
{
// 导入trait类库
use Test;
// 2. 添加类成员
public $site;
protected $role;
// 构造方法
public function __construct($site, $role)
{
$this->site = $site;
$this->role = $role;
}
}
class Demo6_1 extends Demo6
{
// 当前子类的自身属性
private $course;
public function __construct($site, $role, $course)
{
// parent:: 调用 父类中的成员
parent::__construct($site, $role);
$this->course = $course;
}
// 3. 访问类成员
$obj = new Demo6('php中文网', 'Peter Zhu');
echo $obj->getInfo();
echo '<hr>';
$sub = new Demo6_1('php.cn', '朱老师', 'php');
echo $sub->getInfo();
7.接口interface
<?php
interface iDemo
{
// 接口方法
public function getInfo();
public function hello();
}
// 1. 创建类
// Demo7: 工作类
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中文网', '猪老师');
echo $obj->getInfo() . '<br>';
echo $obj->hello() . '<br>';
8.抽象类abstract
<?php
abstract class Chouxiang
{
// 抽象方法
abstract public function getInfo();
// 已实现方法
public function hello()
{
return 'Hello 大家晚上吃饱了吗?';
}
}
// 1. 创建类
// Demo8: 工作类
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中文网', '猪哥');
echo $obj->getInfo() . '<br>';
echo $obj->hello() . '<br>';