11月26日作业:
- 创建类、实例化、命名空间、类成员、类方法(手写)
- 构造方法
:-: 一、创建类
类不好理解,因为概念太抽象。
先说一个比较抽象的,比如动物是一个类,而兔子、猪、猫狗,都是动物类的实例化对象。
类就是一个分类,一个清单。这个类有什么,通过这个类,创建出对象。
对象不是凭空出来的,都是通过类创建出来的。所以咱们是先写类,在创建对象。
创建类
class Animal{
}
调用类(实例化)
$monkey = new Animal(); // 猴子
$rabbit = new Animal(); // 兔子
[danger] 备:类如果只能使用一次,那我们没必须用类,每次直接写代码就可以了。所以类可以实例化多次(N次),次数无限制。
同一个类实例化出来,它们是不一样的
var_dump($monkey == $rabbit);
echo ‘<br>‘;
var_dump($monkey === $rabbit);
echo ‘<br>‘;
检测对象是否是类的实例
var_dump($monkey instanceof Animal);
echo ‘<br>‘;
:-: 二、类属性
关键词: 类属性, 访问限制符, 动态属性
在类里直接写代码,是错误的
错误示例
class Animal{
echo 111;
}
类 是一个类型的集合,它里面有成员的。
类里成员有两种:属性(变量)和行为(方法)。任何类,都有属性和行为。
1、属性(变量)
class People{
$name = ‘杨幂’; //会报错,必须有修饰符
$age = 31; //会报错,必须有修饰符
// 属性 设置了初始值
public $name = ‘杨幂’;
public $age = 31;
}
外部访问:需要通过访问限定符、或修饰符
$yangmi = new People;
echo $yangmi->name;
在类中声明属性变量时,设置它的作用域
作用域(修饰符):目前我们先学习public
public 公有的,类内,类外,子类都是可访问的
protected 受保护的,类内,子类都可以访问
private 私有的,只能类内访问
属性重新赋值
$yangmi->name = ‘欧阳克’;
$yangmi->age = 18;
echo $yangmi->name.$yangmi->age;
2、行为(方法)
关键词: self, $this
每个方法里,都带有$this,用作调用自己类的属性和方法
class People{
// 属性
public $name = ‘杨幂’;
public $age = 31;
// 方法,默认就是public ,不加也是
public function getInfo(){
echo ‘姓名:杨幂,年龄:31’;
return ‘姓名:杨幂,年龄:31’;
}
// 方法
public function getInfo1(){
// self : 当前类
$obj = new self();
// 输出对象属性
return ‘姓名: ‘ .$obj->name .’, 年龄: ‘ . $obj->age . ‘<br>‘;
}
// 方法
public function getInfo2(){
// 因为该方法必须通过对象调用,所有没必要在类中实例化
// 直接引用该类的实例化对象即可
// 在类中使用伪变量: “$this” 引用当前类的实例
// $this = new self(); 相当于先执行了这条语句,尽管你不需要这样做
return ‘姓名: ‘ .$this->name .’, 年龄: ‘ . $this->age . ‘<br>‘;
}
// 方法
public function getInfo3(){
// 当前类
$obj = new People();
$obj->name = ‘欧阳克’;
$obj->age = 18;
// 输出对象属性
return ‘姓名: ‘ .$obj->name .’, 年龄: ‘ . $obj->age . ‘<br>‘;
}
}
// 类实例化
$yangmi = new People();
echo $yangmi->getInfo();
echo $yangmi->getInfo1();
echo $yangmi->getInfo2();
echo $yangmi->getInfo3();
// 查看类中定义的对象方法: public 才会显示出来
$methods = get_class_methods(‘People’);
echo ‘<pre>‘.print_r($methods,true);
echo ‘<hr>‘;
:-: 三、构造方法(魔术方法)
构造方法是类中的特殊方法,在类实例化时会被自动调用,可用来初始化对象成员
调用类的时候,立即执行构造方法,第一个执行的方法。方法的没有位置的先后顺序
构造方法: public function construct(){…} ,也可以跟类名一样的方法
class People{
// 属性
public $name;
public $age;
// 构造方法
public function construct($name, $age){
echo ‘开始执行’;
$this->name = $name;
$this->age = $age;
}
// 方法
public function getInfo(){
return ‘姓名: ‘ .$this->name .’, 年龄: ‘ . $this->age . ‘<br>‘;
}
}
// 实例化
$obj = new People(‘杨幂’,31);
echo $obj->getInfo();