1.编程代码,抄写课堂案例,也可以自定义(选做)
//oop创建规则-声明类,创建类方法类成员,实例化类好调用类方法
<?php
//声明创建类
class Demo1{
//定义类成员
public $site = 'jason.io';
public $role = '学生';
//定义类方法
public function getSite(){
return $this->site .'欢迎您';
}
public function getRole(){
return $this->role;
}
}
//实例化类
$d1 = new Demo1();
//调用类方法
echo $d1->getSite();
echo $d1->getRole();
demo2.php
构造函数
<?php
//构造函数
class Demo2{
public $site;
public $role;
public function __construct($site,$role)
{
$this->site = $site;
$this->role = $role;
$this->log();
}
public function log(){
echo $this->site . $this->role;
}
}
//实例化调用类
$obj = new Demo2('jason.cn','码农网');
demo3.php
访问控制,实现类的封装
<?php
//访问控制,实现类的封装
class Demo3{
public $user;
private $role;
public function __construct($user,$role)
{
$this->user = $user;
$this->role = $role;
}
public function __get($name)
{
if (isset($this->user) && $this->user == 'admin'){
echo '我其实是一个:'.$this->role;
}else{
echo '您无权查看';
}
}
}
$d3 = new Demo3('admin','超人');
$d3->role;
demo4.php
类的继承
<?php
//类的继承
class Demo4{
public $name;
protected $role;
public function __construct($name,$role)
{
$this->name = $name;
$this->role = $role;
}
public function getInfo(){
return '我的名字:'.$this->name .'职业:'.$this->role;
}
}
//继承,关键字extends
class Demo4_1 extends Demo4{
public $email;
//构造函数
public function __construct($name, $role,$email)
{
//先调用父类的构造函数
parent::__construct($name,$role);
$this->email=$email;
}
//重写父类函数
public function getInfo()
{
echo parent::getInfo() .'我的邮箱是:'.$this->email;
}
}
$d4 = new Demo4_1('大狗','超人','abc@qq.com');
$d4->getInfo();
demo5.php
trait 解决PHP中不能多继承的问题,代码复用问题,可以当成一个公共的类库,因为不是对象,所以不能实例化
<?php
//trait 解决PHP中不能多继承的问题,代码复用问题,可以当成一个公共的类库,因为不是对象,所以不能实例化
trait Test{
public function getInfo(){
echo '这是trait类的getInfo方法';
}
}
//创建基类
class Demo5{
use Test;
public $site;
protected $name;
public function __construct($site,$name)
{
$this->name = $name;
$this->site = $site;
}
public function getInfo(){
echo '这是父类的getInfo方法';
}
}
class Demo5_1 extends Demo5{
// use Test;
public $email;
public function __construct($site, $name,$email)
{
parent::__construct($site, $name);
$this->email = $email;
}
public function getInfo(){
echo '这是本类的getInfo方法';
}
}
//实例化
$d5 = new Demo5_1('jason.io','大狗','a@qq.com');
$d5->getInfo();
//tip优先级(本类没有引入use trait的情况)-本类->父类->trait
//tip优先级(本类引入use trait的情况)-本类->trait->父类
demo6.php
接口
<?php
//接口
interface iDemo{
public function getInfo();
public function hello();
}
class Demo6 implements iDemo {
public $name;
public $email;
public function getInfo()
{
return '我的名字:'.$this->name.'邮箱:'.$this->email;
}
public function hello()
{
return '大家好呀';
}
public function __construct($name,$email)
{
$this->name = $name;
$this->email = $email;
}
}
$d6 = new Demo6('大狗','d@qq.com');
echo $d6->getInfo() .'<hr>';
echo $d6->hello() .'<hr>';
demo7.php
抽象类
<?php
abstract class ChouXiang{
//抽象方法
abstract function getInfo();
//已经实现方法
public function hello(){
return '大家晚上好呀';
}
}
class Demo7 extends ChouXiang{
public $name;
public $role;
public function getInfo()
{
return '我的名字:'.$this->name.'职业:'.$this->role;
}
public function __construct($name,$role)
{
$this->name = $name;
$this->role = $role;
}
}
$d7 = new Demo7('大狗','养猪');
echo $d7->getInfo() .'<hr>';
echo $d7->hello() .'<hr>';
2. 手抄课堂笔记: 1203.md (必做)
总结
1.今天学习了面向对象,面向对象总体分为三步,声明定义类->创建类函数类方法->实例化类和调用类方法函数;
2.学习了构造函数,构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作
3.学习类里面的修饰关键词,public公开的,谁都可以调用,protected受保护的,只允许本类和子类调用,private私有的,只允许本类调用
4.学习了类的继承,关键字extends,继承可以省去重复的多余的代码,自动继承父类方法
5.学习trait 解决PHP中不能多继承的问题,代码复用问题,可以当成一个公共的类库,因为不是对象,所以不能实例化
6.学习了接口和抽象类,不同处
抽象类:有抽象方法(未完成方法),也有已经实现方法
接口:全部是抽象方法
接口和抽象类相同处:都不能实例化,因为内部有抽象方法原因