<?php
//作业内容:
// 1. 实例演示函数的相关知识点
// 2. 实例演示课堂上提及全部类与对象的关键字,重点放在属性与方法的重载上
//申明函数 PHP7.1以后,类型约定
function hello(int $a, int $b) : int
// :int 返回值必须是数值 没有return写:void待定
{
// 获取传递的参数
func_get_args();
print_r(func_get_args());
return "$a + $b";
}
//函数调用
echo hello(22,2)."\n";
class Person
{
// 属性
private string $act;
// 私有属性
private int $age;
private string $name;
private int $salary;
// 构造方法,实例初始化自动调用
public function __construct($act,$age,$name,$salary)
{
$this->act = $act;
$this->age = $age;
$this->name = $name;
$this->salary=$salary;
}
// 属性重载, 拦截外部的非法属性访问
// __get()获取器,当获取一个不存在或【无权限访问】的属性时触发
public function __get($propertyName){
$result = 0;
if ($propertyName === 'age'){
$result = $this->age +5;
}elseif ($propertyName === 'salary' ){
$result = $this->salary+2000;
}elseif ($propertyName === 'name'){
$result = $this->name.'--->名儿';
}elseif ($propertyName === 'act'){
$result = $this->act;
}
return $result;
}
// __set(value): 属性设置器(写)
// __set(属性名,新值)
public function __set($name,$value){
$this->$name = $value;
}
private function message($a,$b,$c)
{
return <<<DATA
"$this->name,年龄:$this->age 技能:$this->act,工资:$this->salary"
DATA;
}
// 普通方法重载: __call()
public function __call($name,$arguments) // $name: 方法名称, $arguments: 参数数组
{
// return $name.','.join(',',$arguments);
if ($name === 'ok'){
echo '此方法不存在,啥也不做!';
}elseif ($name === 'message'){
return <<<DATA
"$this->name,年龄:$this->age 技能:$this->act,工资:$this->salary"
DATA;
}
}
}
$xiaoming = new Person('一指禅','18','王敏',3500);
echo '姓名:'. $xiaoming->name.PHP_EOL;
echo '年龄:'.$xiaoming->age.PHP_EOL;
echo '工资+2千:' .$xiaoming->salary.PHP_EOL;
echo'--------------'.PHP_EOL;
// set设置属性
$xiaoming->act = '降龙十八掌'.PHP_EOL;
echo $xiaoming->act.PHP_EOL;
echo $xiaoming->message(1,3,5).PHP_EOL;
echo $xiaoming->ok(); // 没有这个方法
/**
* class: 声明类
* new: 类的实例化
* public: 访问限制符(公开成员/默认值)
* private: 访问限制符(私有成员,仅在类中访问,类外不可见)
* __construct(): 构造方法(实例化时调用,用于初始化类实例)
* $this: 当前类实例的引用,只能用在类中
* __get($name): 属性重载,拦截非法属性"读"访问
* __set($name,$value): 属性重载,拦截非法属性"写"访问
* __call($name,$arguments): 方法重载,拦截非法的方法访问
*/
运行结果