一、创建类
类: 是生成对象的代码模板
<?php
// 定义一个学生类
class Student {
}
?>
二、成员方法
类中的函数被称为成员方法
<?php
// 定义一个学生类
class Student {
// 声明一个成员方法
function dastudent($name,$age){
echo '姓名:' . $name . ';' . '年龄:' . $age . ';';
}
}
?>
三、实例化
实例化是通过关键字new
来声明一个对象
调用方法格式:对象名 -> 成员方法
<?php
// 定义一个学生类
class Student {
// 声明一个成员方法
function dastudent($name,$age){
echo '姓名:' . $name . ';' . '年龄:' . $age . ';';
}
}
// 类的实例化
$a = new Student();
$b = new Student();
$c = new Student();
//3个对象都是Student类的实例,有不同的#id
var_dump($a);
echo '<br>';
var_dump($b);
echo '<br>';
var_dump($c);
echo '<br>';
// 检测对象是否是同一个类的实例
var_dump($a instanceof Student);
echo '<br>';
// 3个对象虽是同一个类的实例,但彼此并不相等,是完全独立的
var_dump($a == $b);
echo '<br>';
var_dump($b === $c);
echo '<br>';
$a->dastudent('小明',12);
?>
四、类成员
类中的变量也称为成员变量
在类中声明属性变量时,需要通过访问限定符,设置它的作用域
属性: 初始化必须使用常数,不得使用表达式
- public 是访问限制符,可视为属性作用域(可见性)
- public 是指该属性不论是类内,类外,子类都是可访问的
- 访问限定符还有protected,private
定义成员变量的格式为:关键字 成员变量名
访问成员变量的格式为:对象名 -> 成员变量
<?php
class Phone{
public $brand = '小米';
public $money = 1999;
}
$mi = new Phone();
echo '品牌为:' . $mi->brand . ',价格为:' . $mi->money . '<hr>';
// 动态对象属性
$mi->size = 5.5;
echo '尺寸为:' . $mi->size . '<hr>';
// get_class_vars()返回类中public属性的属性组成的数组
echo '<pre>' . print_r(get_class_vars(Phone::class),true);
?>
五、对象属性和对象方法练习
self
:当前类$this
:当前类实例对象的引用
<?php
class Student{
public $name = '猪小明';
public $sex = '男';
public $age = 12;
public $classes = '五年级';
public function getInfo1(){
$s1 = new self();
return '姓名:' . $s1->name . ';性别:' . $s1->sex . ';年龄:' . $s1->age . ';年级:' . $s1->classes;
}
public function getInfo2(){
return '姓名:' . $this->name . ';性别:' . $this->sex . ';年龄:' . $this->age . ';年级:' . $this->classes;
}
}
$stu = new Student();
echo $stu->getInfo1();
echo '<hr>';
echo $stu->getInfo2();
// 查看类中定义的对象方法
echo '<pre>' . print_r(get_class_methods(Student::class),true);
?>
六、构造方法与析构方法
<?php
class Phone {
public $brand;
public $size;
public $money;
// 构造方法
public function __construct($brand,$size,$money) {
$this->brand = $brand;
$this->size = $size;
$this->money = $money;
}
// 对象方法
public function getInfo() {
return '品牌为:' . $this->brand . ';尺寸为:' . $this->size . ';价格为:' . $this->money . '<hr>';
}
// 析构方法: 在对象被删除/清理时自动调用
public function __destruct() {
echo '对象已被删除';
}
}
$p = new Phone('华为',6.3,2999);
echo $p->getInfo();
?>
七、命名空间
- 命名空间: 解决全局成员的命名冲突问题, 借鉴了文件目录的基本思想
- 目录: 同一目录下不允许重名文件, 但不同目录下, 允许同名文件存在
- 空间: 同一空间内不允许成员重名, 但不同空间内, 允许同名成员存在
- 命名空间使用 “namespace” 关键字声明
namespace test1;
class Test
{
}
namespace test2;
class Test
{
}
namespace test3;
class Test
{
}
// 使用大括号来声明命名空间
namespace a {
class Test
{
}
}
namespace b {
class Test
{
}
}
// 表示匿名空间: 全局空间, 也是默认的空间,或叫根空间,用 \ 表示
namespace {
class Test
{
}
}
测试命名空间
zuoye01.php
<?php
// 使用大括号来声明命名空间
namespace a {
class Test
{
public function getInfo(){
echo '我是命名空间a';
}
}
}
namespace b {
class Test
{
public function getInfo(){
echo '我是命名空间b';
}
}
}
// 表示匿名空间: 全局空间, 也是默认的空间,或叫根空间,用 \ 表示
namespace {
class Test
{
public function getInfo(){
echo '我是匿名空间';
}
}
}
?>
test.php
<?php
include __DIR__ . '/zuoye01.php';
$a = new \a\Test();
$a->getInfo();
echo '<br>';
$b = new \b\Test();
$b->getInfo();
echo '<br>';
$c = new Test();
$c->getInfo();
八、总结
学会了创建类,通过类实例化对象,类成员和类方法的声明与调用,学会使用了命名空间。