• 引用参数
$name = "eko";
function chang_name(&$name){
$name .= '_after_change';
}
chang_name($name); //会改变原有参数$name
echo $name;
  • 参数类型声明
function test(array $arr){
for ($i=0; $i <count($arr) ; $i++) {
echo $arr[$i] .'</br>';
}
}
test('hello'); 报错 interface Animal {
function eat();
function sleep();
} class Cat implements Animal{
public function eat(){
echo "cat eat fish";
}
public function sleep(){
echo "cat is sleeping";
}
} function fn(Animal $animal){
echo $animal -> eat();
} fn(new Cat());
  • 可变参数
function fn(){
$arg_nums = func_num_args();  //获得参数个数
echo "此时传入 $arg_nums 个参数";
echo "</br>"; $arr_args = func_get_args(); //获得所有参数,返回数组
echo gettype($arr_args) ."</br>"; //输出array foreach ($arr_args as $arg) {
echo $arg."</br>";
} $arg = func_get_arg(0); //获得第0个参数
echo $arr_arg;
}
fn('hello',123);
//在PHP5.6以上版本中,可以用拓展运算符代替可变参数
function fn(...$args){
echo "input ".count($args)." arguments";
echo '</br>';
for ($i=0; $i <count($args) ; $i++) {
echo $args[$i] .'</BR>';
}
}
fn('hello','word',123);
fn(...['hello','word',123]); //结果同上 //如果有多个参数,可变参数必须放在最后
function fn($name,...$args){
echo $name .'</br>';
for ($i=0; $i <count($args) ; $i++) {
echo $args[$i] .'</BR>';
}
}
fn('kitty','yellow','miao');
  • 返回类型
//php7 中支持函数返回值类型声明
function sum(...$args):int{
$sum = 0 ;
foreach ($args as $value) {
$sum += $value;
}
return $sum;
//return 'hello'; //报错,Return value of sum() must be of the type integer
}
echo sum(1,2,3,4,5);
  • 匿名函数 (闭包函数 Closure)
echo preg_replace_callback('~-([a-z])~', function ($match) {
return strtoupper($match[1]);
}, 'hello-world');
//输出 helloWorld

<基础> PHP 进阶之 函数(Function)的更多相关文章

  1. 二、JavaScript语言--JS基础--JavaScript进阶篇--函数

    1.什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. 如:我们要完成多组数和的功能. var sum; sum = 3+2; alert(sum); sum=7+8 ; alert(s ...

  2. python基础(9)-迭代器&生成器函数&生成器进阶&推导式

    迭代器 可迭代协议和迭代器协议 可迭代协议 只要含有__iter__方法的对象都是可迭代的 迭代器协议 内部含有__next__和__iter__方法的就是迭代器 关系 1.可以被for循环的都是可迭 ...

  3. jQuery基础---Ajax进阶

    原文:jQuery基础---Ajax进阶 内容提纲: 1.加载请求 2.错误处理 3.请求全局事件 4.JSON 和 JSONP 5.jqXHR 对象 发文不易,转载请注明出处! 在 Ajax 基础一 ...

  4. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  5. C++_进阶之函数模板_类模板

     C++_进阶之函数模板_类模板 第一部分 前言 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ...

  6. 第4章 基础知识进阶 第4.1节 Python基础概念之迭代、可迭代对象、迭代器

    第四章 基础知识进阶第十七节 迭代.可迭代对象.迭代器 一.    引言 本来计划讲完元组和字典后就讲列表解析和字典解析,但要理解列表解析和字典解析,就需要掌握Python的高级的类型迭代器,因此本节 ...

  7. python基础——面向对象进阶

    python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...

  8. Python基础与进阶

    1 Python基础与进阶 欢迎来到Python世界 搭建编程环境 变量 | 字符串 | 注释 | 错误消除 他只用一张图,就把Python中的列表拿下了! 使用 If 语句进行条件测试 使用字典更准 ...

  9. js基础 js自执行函数、调用递归函数、圆括号运算符、函数声明的提升 js 布尔值 ASP.NET MVC中设置跨域

    js基础 目录 javascript基础 ESMAScript数据类型 DOM JS常用方法 回到顶部 javascript基础 常说的js包括三个部分:dom(文档document).bom(浏览器 ...

随机推荐

  1. C++标准模板库(STL)介绍:string的基本用法

    1.带空格的字符串的输入 getline(cin, str)

  2. Bitmap BitmapData

    var sp:Sprite=new Sprite(); sp.graphics.beginFill(0xffccdd); sp.graphics.drawRect(0,0,100,100); sp.g ...

  3. csv文件操作

    1.python2中: import csv infos = [ ['peter','male'], ['marry','female'], ['johon','male'], ['rose','fe ...

  4. PAT 甲级 1011 World Cup Betting (20)(20 分)

    1011 World Cup Betting (20)(20 分)提问 With the 2010 FIFA World Cup running, football fans the world ov ...

  5. PAT 乙级 1012 数字分类 (20) C++版

    1012. 数字分类 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一系列正整数,请按要求对数字进 ...

  6. centos6.5网络虚拟化技术

    一.配置KVM虚拟机NAT网络 1.创建脚本执行权限 下面是NAT启动脚本 # vi /etc/qemu-ifup-NAT 赋予权限 # chmod +x /etc/qemu-ifup-NAT 下载镜 ...

  7. base_基础

    目录 A B C D E F G H I J K L M N S: Sqlite: 1;orhanobut/hawk; A: Adapter: 图片处理 Android中自定义布局中加载图片Bitma ...

  8. 【Laravel】 常用的artisan命令【原创】

    全局篇   查看artisan命令 php artisan php artisan list   查看某个帮助命令 php artisan help make:model   查看laravel版本 ...

  9. rabbitmq的vhost与用户管理(转)

    原文地址:https://blog.csdn.net/leisure_life/article/details/78707338 当我们在创建用户时,会指定用户能访问一个虚拟机,并且该用户只能访问该虚 ...

  10. 进程间通信IPC (InterProcess Communication)

    一.进程间通信的概念 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区, ...