类与对象、oop封装性、构造器 . 魔术方法的应用
类与对象、oop封装性、构造器 . 魔术方法的应用:属性重载与方法重载 , 类的原生自动加载,类的继承与功能扩展1.类与对象,oop封装性,构造方法类与对象
//创建类
class User{}
OOP的封装性
//类的实例化,即创建对象
$mj = new User();
构造方法
//类属性的访问修饰符,实现了类OOP的封装性
public string $name;
private int $salary;
protected int $age;
2. 类的原生自动加载
// __construct(){}构造方法
public function __construct($name,$salary,$age){
//$this代表本对象(实例化的对象)
$this->name = $name;
$this->salary = $salary;
$this->age = $age;
}
3. 属性重载和方法重载属性的重载
/**类的自动加载器 */
spl_autoload_register(function ($className) {
// echo $className; //加载的类名称
$classFile = __DIR__ . DS . 'class' . DS . $className . '.php';
if (is_file($classFile) && file_exists($classFile)) require $classFile;
});
方法的重载
// !当访问当前环境下未定义或不可访问的类属性时 ,重载方法__get会被调用。
public function __get($name)
{
return $this->data[$name];
}
// !当给当前环境下未定义或不可访问的类属性赋值时 ,重载方法__set会被调用。
public function __set($name, $value)
{
$this->data[$name] = $value;
}
4. 类的继承与功能扩展类的继承
// !当访问当前环境下未定义或不可访问的类普通方法时 ,重载方法__call会被调用。
public function __call($name, $args)
{
if ($name == 'show') {
return $this->data;
}
if ($name == 'sum') {
// var_dump($args);
return array_sum($args);
}
}
功能的扩展
class Son extends Product
{
// 扩展属性
public string $brand;
// override 重写
public function __construct($name, $price, $num, $brand)
{
// parent:: 调用父类成员
parent::__construct($name, $price, $num);
$this->brand = $brand;
}
// 重写show方法
public function show()
{
return <<<SHOW
1. 品名:$this->name
2. 价格:$this->price
3. 数量:$this->num
4. 品牌:$this->brand
SHOW;
}
}
【本文由:大丰网站制作 http://www.1234xp.com/dafeng.html 复制请保留原URL】
// 功能扩展
public function total()
{
return "$this->name,数量为{$this->num},总计" . ($this->price * $this->num) . '元';
}