1.第一部分
主要内容:
- 创建类: class
- 实例化: new
- 引用当前类: self
- 引用当前类实例: $this
- 引用当前类的父类: parent
- 对象访问符: ->
- 范围解析符: 双冒号 ::
- 类的继承与扩展: extends
- 成员的访问限制符: private, protceted, public
实例
效果图
代码
<?php
// 创建类sum
class sum
{
//对公共变量进行赋值
public $a =1;
public $b =1;
//创建函数
public function sum($x,$y)
{
$c =$x + $y ;
echo $c;
}
}
/**
* 访问当前类中的属性,实例化1
*/
class mydemo
{
public $site = '1.朱老师不帅';
public $date = '3.朱老师很帅';
//private: 属于私有成员,只属于当前,只允许当前类访问,不允许子父类访问,外部也不行
private $cat = '4.私有的猫';
//protected:属于受保护的成员,不允许类外部访问,但可以在子类中访问
protected $pig = '5.帅哥';
public function getSite()
{
// 实例化类
$obj = new mydemo();
// 输出site属性
return '2.反复强调:'.$q=$obj ->site;
}
// 运用当前类的实例$this
public function getIn()
{
return $this ->site;
}
// 构造方法:实例化自动调用
public function __construct ($date='555'){
$this ->site = $date;
}
}
$obj = new mydemo(333);
// 访问site属性,并输出,因为构造方法先执行,实例化重新赋值site
echo $obj ->site;
echo "<br>";
//重新实例化,没传参数,数值变成555
echo $obj ->getSite();
echo "<br>";
echo $obj ->getIn();
echo '<hr>';
//外部无法访问我的猫cat属性
echo '2.反复强调:'.$q=$obj ->site;
// 访问下面无法访问的属性,下面的也显示不出来
// echo $obj ->cat;
// echo $obj ->pig;
echo '<br>'.'无法显示的获取的部分';
echo '<hr>';
//对于继承的使用,继承mydemo类,继承所有满足条件的元素
class Demo2 extends mydemo
{
// 对父类方法扩张
public function getIn(){
return parent:: getIn()."666". $this->hhh;;
}
// public function getIn()
// {
// return parent::getIn() . "讲师: " . $this->hhh;;
// }
public $hhh;
public function __construct($hhh,$date)
{
parent::__construct($date='朱老师帅呆了');
$this -> hhh = $hhh;
}
}
$mobj = new Demo2(9,8);
echo $mobj ->hhh;
echo '<br>';
echo $mobj ->getIn();
echo '<br>';
//通过构造方法赋的值,指这部分construct($hhh,$date),并不会改变类的属性元素
echo $mobj ->date;
?>
2.对trait的应用
<?php
// trait: 改变了单继承的模式,实现了代码复用
trait Test
{
public function getInfo()
{
return '我是: ' . $this->site . ' 在学: ' . $this-> role;
}
}
// 不能实例化
// $o = new Test();
// 1. 创建类
class mydemo2
{
// 引用trait
use Test;
public $site;
protected $role;
public function __construct($site='', $role="")
{
$this->site = $site;
$this->role = $role;
}
}
// 基于mydemo2创建子类
class Sub extends mydemo2
{
protected $shuai;
// 重写了父类的__construct()
public function __construct($site, $role, $shuai)
{
parent::__construct($site, $role);
$this->shuai = $shuai;
}
// 重写了父类的getInfo()
public function getInfo()
{
return parent::getInfo() . ', 我帅不帅: '. $this->shuai;
}
}
class Sub99 extends Sub
{
}
//实例化化,传值
$sub = new Sub99('小辰', 'php开发', '帅');
echo $sub->getInfo();
3.小结
通过这次实验,我对于类与对象有了进一步的理解,在第一部分,对于重新实例化,却没有值,所以没地二个结果产生影响。在做trait实验的时候,我把大括号,用成了中文状态下的括号,就一直出错,还好最后找出来问题了,另外基本基本就没有什么问题了。