函数及类与对象
一. 实例演示函数的相关知识点
一). 输出函数
echo 'Hello';
print 'World'; //有返回值
var_dump([1,2,3]);
var_export([1,2,3]);
printf('uname = %s','朱老师');//格式化输出
print_r([1,2,3]);
echo sprintf('<div style="color:blue">%s</div>','php中文网');
$str=vprintf('%d+%d=%d',[10,20,10+20]);
echo $str;
// 四个数据格式化函数记忆方式
// 1.printf(format,a,b,...):打印(离散参数)
// 2.vprintf(format,array):打印(数组参数)
// 3.sprintf(format,a,b,...):只返回不打印
// 4.vsprintf(format,array):只返回不打印
// 记忆:
// s:只返回不打印
// v:数组参数
二).函数
1.申明 (类型进行限定)
function sum(int $a,int $b):int{return $a+$b;}
2.调用
echo sum(10,20);
3.参数
// php禁止函数重载:同一作用域内,存在同名函数,根据参数不同判断调用哪个
function sum1(int $a, int $b,int $c=0):int{ return array_sum([$a,$b,$c]);}
// 3.1参数太少:加一个默认值
echo sum1(1,2,3),"\n";
// echo sum1(1,2);这样会报错需要默认值
// 3.2参数太多:可以用可变参数(...rest)
echo sum1(1,2,3,4,5,6),"\n";
function sum2(...$args):int{return array_sum($args);}
// 3.3引用参数
function sum3(&$a){return $a+=10;}
$a=10;
echo sum3($a);
echo '$a='.$a."\n";
4.返回值
// 4.1默认返回单值
// 4.2多值返回用数组
function fn1(){ return ['admin','admin@php.cn'];}
print_r(fn1());
list($name,$email)=fn1();
// 可以直接用js模板解构
[$name,$email]=fn1();
echo "$name($email)";
二. 实例演示课堂上提及全部类与对象的关键字,重点放在属性与方法的重载上
一)代码的实现
<?php
/**
* class: 声明类
* new: 类的实例化
* public: 访问限制符(公开成员/默认值)
* private: 访问限制符(私有成员,仅在类中访问,类外不可见)
* __construct(): 构造方法(实例化时调用,用于初始化类实例)
* $this: 当前类实例的引用,只能用在类中
* __get($name): 属性重载,拦截非法属性"读"访问
* __set($name,$value): 属性重载,拦截非法属性"写"访问
* __call($name,$arguments): 方法重载,拦截非法的方法访问
*/
// 类声明:class
class Demo
{
// 访问限制符:public公开成员(默认值)
// __method:魔术方法,用户不能直接调用,PHP调用
// 用途:创建实例初始化状态,属性,调用方法
public string $name='朱老师';
private int $salary;
private int $age;
// 方法:函数
// 构造方法:在类实例时化自动调用
// __method:魔术方法,用户不能直接调用,由php调用
// 用途:创建实例初始化状态,属性赋值,调用方法
public function __construct($name,$salary,$age)
{
$this->name=$name;
$this->salary=$salary;
$this->age=$age;
}
public function getSalary(){
return $this->salary-5000;
}
public function setSalary($value){
$this->salary +=$value;
}
//属性重载,拦截外部的非法属性访问
public function __get($name){
if($name==='salary'){
return $this->$name-5000;
}
return $this->$name;
}
// __set(value):属性设置器(写)
public function __set($name,$value){
if($name==='salary'){
$this->$name += $value;
}
else{
$this->$name = $value;
}
}
// 格式化打印
private function hello($a,$b,$c)
{
return <<< DATA
$this->name:
工资($this->salary)
年龄($this->age)
DATA;
}
// 方法重载
// $name:方法名称,$arguments:参数数组
public function __call($name,$arguments)
{
// return $name .','.join(',',$arguments);
if($name==='hello'){
return <<< DATA
$this->name:
工资($this->salary)
年龄($this->age)
DATA;
}
}
}
// 类的实例化:对象
// 实例===对象
$obj = new Demo('王老师',8000,30);
$obj->salary += 2000;
// $obj->setSalary(2000);
echo $obj->salary."\n";
echo $obj->getSalary()."\n";
$obj->age=40;
echo $obj->age =40,"\n";
echo $obj->hello('a','b','c')."\n";
var_dump($obj);
Db::table('user')->field('id','name');
二)实现的效果图