php核心技术与最佳实践(笔记一)

时间:2023-03-09 13:31:01
php核心技术与最佳实践(笔记一)

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参数是一个数组,包含着要传递给方法的参数,