目录
类的定义与实例化对象
<?php
class My{ //创建一个My类对象,名字遵循驼峰式写法
}
$m = new My; //实例化对象,并保存。或者new My()
var_dump($m); //打印对象,对象不能使用echo输出。 object(My)[1]
?>
类成员
类成员,指直接定义在类结构{}内部的一级成员,即直接依赖{}的成员。在PHP中类成员有三种:成员变量(属性),成员方法(成员函数)和类常量
属性
- 成员变量:就是在类结构{}下直接定义的变量,但是定义的方式与普通变量稍微有点不同,需要在变量名字前使用一个关键字public,定义语法: public 变量名 = 值; ,成员变量可以赋值也可以不赋值。
- 成员变量访问:成员变量必须通过对象才能进行访问,也就是需要先通过实例化得到对象,然后通过对象实现对成员变是的增册改查。访问语法:$对象名->属性名
<?php
class Buyer{
public $money = 0;
}
$m = new Buyer; //实例化对象,并保存。或者new My()
//访问属性,输出0
echo $m->money;
//修改属性值,输出10
echo $m->money = 10;
//删除属性
unset($m->money);
//新增属性,输出20
$m->money = 20;
echo $m->money;
?>
方法
成员方法:就是在类结构下定义的函数,函数内部的内容与原来函数结构一样,可以有分支、循环结构等
<?php
class Buyer{
//定义方法
function Display(){ //function前加public也可以不加
echo 123;
}
}
//实例化对象
$xm = new Buyer;
//访问成员方法
$xm->Display();
?>
类常量
类常量是在类中定义的常量。类常量的定义只能使用一种方式:const 常量名 = 值
类常量不是由对象来进行访问,这里暂时先不介绍。
<?php
class Buyer{
const PI = 3.14;
}
?>
访问限定修饰符
访问修饰限定符,是一种用在属性或者方法前的修饰关键字,是用来控制属性或者方法的访问位置的。在PHP中访问修饰限定符分为三种:public、protected和private
首先需要明白一组概念类的内部和外部
- 类内部:是指类定义的内容内部,即类名后内部
- 类外部:是指类定义的外部内容,即类名之外的所有地方
类成员的访问权限控制是内部访问(私有)、链内部访问(受保护)和全部访问(公有)
public
public公有,即表示所修饰的内容(属性或者方法)可以在当前类的内部访问,也可以在类的外部访问。如下在类的外部进行访问
<?php
class Buyer{
//公有属性
public $count = 100;
}
$s = new Buyer();
echo $s->count; //输出100
?>
protected与private
- protected受保护的,即表示所修饰的内容只能在类的内部访问
- private:私有,即表示所修饰的内容只能在当前类的内部|访问
<?php
class Buyer{
protected $money = 100;
private $age = 18;
}
$s = new Buyer();
echo $s->money; //protected修饰的成员不能在外部访问
echo $s->age; //private修饰的成员不能在类外部访问(当前类)
?>
访问修饰限定符不只是限定属性,也用来限定方法。定义的方法如果没有指定修饰限定符,默认为public
类内部对象
类成员属性和方法的访问必须通过对象才能访问,类外部可以通过实例化得到类对象从而实现成员访问,但是类内部又不能访问类外部的对象(未知),此时类的内部就内置了一个对象$this代表来访对象。
1.尝试在类内部方法中访问属性
<?php
class Saler{
//属性
public $count = 100;
protected $discount = 0.8;
private $money = 100;
public function getAll(){
echo $count,$discount,$money;
}
}
$s = new Saler;
$s->getAll(); //报错,显示未定义的的变量
?>
原因:方法本质是定义在内部的函数,因此受限于作用域的问题,在方法内部访问的变量系统会认定为局部变量(必须内部定义或者参数传入),否则就会提示未定义
类内部访问类成员,需要通过对象来进行访问
$this
系统内部能够检测到哪个对象在调用方法,并且能够复制对应的对象,这个就是类成员方法内置对象$this
<?php
class Saler{
//属性
public $count = 100;
protected $discount = 0.8;
private $money = 100;
public function getAll(){
//$this代表的就是相应的对象
echo $this->count,$this->discount,$this->money;
}
}
$s = new Saler;
$s->getAll(); //正常输出
?>
构造方法
思考:属性一般不会在类定义的时候就初始化,那实例化对象的时候,属性的数据不都是为空吗?这样的数据有什么价值呢?
引入:属性属于对象使用,在类中初始化的确没有太多价值,但是对象实例化之后如果属性数据为空也没有价值。因此通常属性都是在对象实例化的时候进行初始化的,这个时候就需要用到一种自动构造的方式来完成。
构造方法_construct(),是一种类结构特有的特殊方法,该方法由系统规定好,开发人员在定义的时候只需要写抄一遍,有了构造方法的类在实例化对象之后,对象就会自动调用。
如下,我们在实例化对象后,并没有调用类中的函数,可是依然输出了hello。我们也可以在构造函数中调用一个类中的函数。
<?php
class Saler{
public function __construct(){
//$this代表的就是相应的对象
echo 'hello';
}
}
$s = new Saler; //输出hello
?>
初始化属性
<?php
class Saler{
public $name;
public $age;
//构造方法,初始化属性
public function __construct($name,$age){
$this-> name = $name;
$this-> age = $age;
}
}
$s = new Saler('Lucy',18);
var_dump($s);
?>