1.1面向对象的型与本

类是对象的抽象组织,对象是类的具体存在。

1.1.1对象的形

<?php
class Person{
    public $name;
    public $gender;
    public function say(){
        echo $this->name,"is ",$this->gender;
    }
}

$student = new Person();
$student->name='Tom';
$student->gender='male';
$student->say();

 

1.1.2对象的本

1.1.3对象与数组

1.1.4对象与类

1.2魔术方法的应用

魔术方法是以两个下划线开头,具有特殊作用的一些方法

__construct方法就是一个标准的魔术方法,称为构造方法,定义了这个方法后,每次创建对象时都会先调用此方法,适合在使用对象之前做一些初始化工作;

如果构造函数定义了参数,则实例化对象必须传参,或者为参数定义默认值,否则会报错;

class Family{
    public $people;
    public $location;
    public function __construct($p=null,$loc=''){
        $this->people = $p;
        $this->location = $loc;
    }
}

new Family;

1.2.1  __set和__get方法

<?php
class Account{
    private $user = 1;
    private $pwd = 2;
}
$a = new Account;
echo $a->user;

以上代码会报一个不允许访问私有属性的错误

<?php
class Account{
    private $user = 1;
    private $pwd = 2;

    public function __set($name,$value){
        echo "Setting $name to $value \r\n";
        $this->$name = $value;
    }

    public function __get($name){
        if (!isset($this->$name)) {
            $this->$name='default value';
        }else{
            return $this->$name;
        }
    }
}
$a = new Account;
echo $a->user;
$a->user = 'haha';
echo $a->user;

增加__set和__get方法后代码能运行,php将这两个方法归类为重载,php的重载值动态的创建类的属性和方法。

 

这两个方法在访问的属性不存在时会调用,如果属性存在,是不调用的。

1.2.2  __call和__callStatic方法

如何防止调用不存在的方法而出错?使用__call魔术方法重载;

mixed __call(string $name,array $arguments)

当调用一个不可访问的方法时,__call方法会被调用。其中$name参数是要调用的方法名,$arguments参数是一个数组,包含着要传递给方法的参数,

posted on 2018-08-22 18:12  新小弦  阅读(507)  评论(0编辑  收藏  举报