一、include和require
两者用法相同,区别在于出错处理,include出错后可继续向下执行,require出错后终止执行。
包含的文件与当前脚本共用同一个作用域
二、类与对象
常用关键字和操作
对象是一个容器,是全局成员的一个前缀。
类:全局成员,声明,class,大驼峰UserName,PascalName
// 类声明 class
class Goods
{
}
// 类的实例化->对象 new
$goods = new Goods();
// 实例总是与一个类绑定。
var_dump($goods instanceof Goods);
echo '<hr>';
echo get_class($goods).'<br>';
// 动态类
// 控制器就是一个动态类,控制器名称出现在url
$controller = $goods;
$obj = new $controller();
var_dump($obj);
/**
* 类成员
* 1. 实例成员:用对象访问,内部用$this->属性
* 2. 静态成员:static定义,用类访问,内部用self::$静态属性名
*/
class User1 {
//实例成员
// 默认:公有成员public
public $username = '路人甲';
// 私有:只能在当前类使用
private $salary = 60000;
//方法:函数语法
public function getSalary(){
$user = new User1();
return $user->salary;
}
}
// 实例化
$user1 = new User1();
echo $user1->username.'<br>';
//私有变量只能内部使用,外部直接使用会报错。
// echo $user1->salary.'<br>';
echo $user1->getSalary();
以上代码如果改动User1这个名字,通用性会受影响,因此this派上用场了。
class User1 {
...
//方法:函数语法
public function getSalary(){
// 缺乏通用性不建议
// $user = new User1();
// return $user->salary;
// 使用this更通用
return $this->salary;
}
}
...
魔术方法
类里面采用双下划线开始的函数,只有使用权没有定义权。
// 获取类中任意私有属性,属性获取器。
class User1 {
//实例成员
// 默认:公有成员public
public $username = '路人乙';
// 私有:只能在当前类使用
private $salary = 100000;
// 区别身份
public $role = '老婆';
// 获取器
public function __get($name) {
// 访问工资时,少报1000
if($this->role == '老婆')
return $this->$name - 1000;
return $this->$name;
}
// 设置器
public function __set($name, $value){
$this->$name = $value;
}
// __get,__set拦截非法请求
}
// 实例化
$user1 = new User1();
echo $user1->username.'<br>';
//通过属性获取器直接访问私有变量。
echo $user1->salary.'<br>';
//通过属性设置器直接设置私有变量。
$user1->salary = 2000000;
echo $user1->salary.'<br>';
构造方法
class User {
public $username;
public $role;
private $salary;
private $age;
// 当前类实例状态(属性值)应该有用户决定。
// 构造方法派上用场,实例化时自动触发。
public function __construct($username, $role, $salary, $age)
{
$this->username = $username;
$this->role = $role;
$this->salary =$salary;
$this->age = $age;
}
}
$user1 = new User('路人甲', '会计', 15000, 30);
$user2 = new User('路人乙', '销售', 10000, 32);
echo $user1->username.'<br>';
echo $user2->username.'<br>';
静态成员
被所有对象共享
class User {
public $username;
public $role;
private $salary;
private $age;
// 当前类实例状态(属性值)应该有用户决定。
// 构造方法派上用场,实例化时自动触发。
public function __construct($username, $role, $salary, $age, $nation = '中国')
{
$this->username = $username;
$this->role = $role;
$this->salary =$salary;
$this->age = $age;
// 初始化静态属性
self::$nation = $nation;
}
// 静态属性,不写死,在构造函数里初始化。
public static $nation;
// 静态方法访问静态属性
public static function hello() {
// 在类中要使用self引用当前类
// return 'Hello,'. User::$nation;
return 'Hello,'. self::$nation;
}
}
$user1 = new User('路人甲', '会计', 15000, 30);
echo $user1->username.'<br>';
// 类外部访问静态变量
echo User::$nation.'<br>';
// 调用静态方法
echo User::hello().'<br>';
$user2 = new User('路人乙', '销售', 10000, 32, '泰国');
echo $user2->username.'<br>';
echo User::$nation.'<br>';