Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:进度有点慢了, 尽快追上来
类的创建:类使用class命令创建,类名可以是任何非 PHP 保留字的合法标签。一个合法类名以字母或下划线开头,后面跟着若干字母,数字或下划线,一个类可以包含有属于自己的常量、变量(称为“属性”)以及函数(称为“方法”)。
类的访问:类的访问需要先实例化,实例化命令为new+需要实例化的类名+(),访问需要使用成员指向符->
<?php
// 1.创建一个类
class Demo1
{
// 2.添加类成员
// 访问限制符 public 创建的类成员,类外部,内部,继承,都可以使用,是公共成员
public $site = 'php中文网';
// 3.创建使用方法/函数
public function getName()
{
// 要访问当前类中的属性(成员)需要先实例化
// 实例化使用new然后跟上当前的类名+()
// 实例化当前类,然后把这个操作赋值在$obj里面
// $obj = new Demo1();
// 在内部实例化可以使用self(它是当前类的引用),来访问当前类名,达到的效果是一样的
$obj = new self();
// 使用有实例化赋值的obj来访问类成员,并返回类成员的值
// 使用成员指向符->访问类成员site
return $obj->site;
}
// 方法/函数里面访问当前类成员的简化写法 $this(它是当前类的实例化缩写)(它等同于先实例化当前类$obj=new self())
public function getInfo()
{
return $this->site;
}
}
// 实例化当前类,然后把这个操作赋值在$obj里面
$obj = new Demo1();
// 使用有实例化赋值的obj来访问类成员
echo $obj->site;
echo '<br>';
// 使用类里面的函数来访问,就是函数里面先实例化当前类,用当前类访问成员,然后获取其返回值,并输出
echo 'getName的值为:'.$obj->getName();
// 使用$this创建的方法,输出的结果是一样的
echo '<br>getInfo的值为:'.$obj->getInfo();
?>
以上的输出结果都是一样的
<?php
<?php
//创建类
class Demo1
{
// 访问限制符
// public 创建的类成员,类外部,内部,继承,都可以使用,是公共成员
public $site = 'php中文网';
// 创建使用方法/函数
public function getName()
{
// 要访问当前类中的属性(成员)需要先实例化
// 实例化使用new然后跟上当前的类名+()
// 实例化当前类,然后把这个操作赋值在$obj里面
$obj = new Demo1();
// 使用有实例化赋值的obj来访问类成员,并返回类成员的值
return $obj->site;
}
}
// 实例化当前类,然后把这个操作赋值在$obj里面
$obj = new Demo1();
// 外部直接访问类成员
echo $obj->site;
外部访问成功
<?php
//1. 创建一个类
class demo4
{
//2.添加类成员
// protected: 创建的类成员为私有成员,只能在类里面,或则继承里面才能访问
protected $info;
//3.添加一个普通方法
public function getInfo()
{
return $this->info;
}
//创建一个构造方法
public function __construct($type)
{
$this->info = $type;
}
}
// 创建一个继承类
// extends:继承demo4的所有能访问的类与方法
// 子类,除了继承,也可以有自己的类成员,与方法
class sub extends demo4
{
//在子类里面创建一个方法/函数
public function getInfo()
{
// parent:: 表示引用父类的某样数据
// parent::getInfo() 表示引用父类的getInfo()方法,获取里面的内容,引用过后还可以添加内容
// :: 双冒号为范围解析符
return parent::getInfo().'学习';
}
// 创建一个子类的构造方法
public function __construct($type)
{
//这里也可以使用parent::__construct来引用父类的构造方法
//这里引用了父类的构造方法,所以传参,有一个要传递在引用的父类构造方法里面
parent::__construct($type);
}
}
// $obj = new demo4('php中文网');
// 私有类成员,外部无法直接访问
// echo $obj->info;
// 通过指向方法来进行访问
// echo $obj->getInfo();
// 子类访问
// 这里因为继承了构造方法,可以用子类直接赋值
$sub = new sub('PHP课程');
// protected 创建的类成员为私有成员,可以由子类继承,所以可以访问到
echo $sub ->getInfo();
直接使用echo $obj->info
在外部访问会报错
在类中访问或者子类继承以后访问都可以
<?php
// 1.创建类
class demo3
{
//2.创建类成员
// private: 添加为保密类,只能在当前类中访问,无法继承,外部不能访问
private $info;
// 创建方法
public function getInfo()
{
return $this->info;
}
public function __construct($type='hello word')
{
$this->info = $type;
}
}
// $obj = new demo3();
// 不能直接访问,显示错误
// echo $obj->info;
// 正确访问
// echo $obj->getInfo();
// 创建一个子类继承父类
// extends:继承demo4的所有能访问的类与方法
class sub extends demo3
{
public function getInfo()
{
return $this->info;
}
}
$sub = new sub();
// private创建的是保密成员,子类无法继承,也无法访问
echo $sub->info;
因为父类的成员为保密类,子类不能继承到保密类成员,在输出的时候不会报错,但是也不会显示出内容。
保密类成员只能在它当前类中访问
__construct
它是固定的用法不允许用户更改,添加。它不能主动调用/触发,只能通过new来调用/触发,每次调用有构造方法的类,都会先执行它,把类里面的属性初始化一次。
<?php
//创建类
class Demo1
{
// 添加类成员
// 访问限制符
// public 创建的类成员,类外部,内部,继承,都可以使用,是公共成员
// public $site = 'php中文网';
// 如果使用构造方法,这里就不用给变量/属性赋值
public $site ;
// 创建使用方法/函数
public function getName()
{
// 方法/函数里面访问当前类成员的简化写法 $this(它是当前类的实例化缩写)(它等同于先实例化当前类$obj=new self())
return $this->site;
}
public function getInfo()
{
return $this->site;
}
public function __construct($type)
{
$this->site = $type;
}
}
// 使用了构造函数,在外部实例化的时候要传递参数进去
$obj = new Demo1('hello word');
// 使用有实例化赋值的obj来访问类成员
echo $obj->site;
echo '<br>';
// 使用类里面的函数来访问,就是函数里面先实例化当前类,用当前类访问成员,然后获取其返回值,并输出
echo 'getName的值为:'.$obj->getName();
// 使用$this创建的方法,输出的结果是一样的
echo '<br>getInfo的值为:'.$obj->getInfo();
结果为: