• 引用参数
$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. java设计模式-Command模式

    1.背景: 站在MM的角度,想命令追求者Boy干什么就干什么,而且将来还可以扩展,怎么做?   2.代码: Command.java: package com.cy.dp.command; publi ...

  2. 廖雪峰Java3异常处理-2断言和日志-3使用Commons Logging

    Commons Logging是Apache创建的日志模块: 可以挂接不同的日志系统 可以通过配置文件指定挂接的日志系统 自动搜索并使用Log4j 如果Log4j不存在,使用JDK Logging(J ...

  3. i++ 和 ++i的字节码指令

    代码 public class Test{ public static void main(String args[]){ int i=0;i=i++; System.out.println(i);} ...

  4. C语言强化——数组

    打印九九乘法表 #include<stdio.h> int main() { int num = 1; for (int i = 1;i <= 9;++i) { for (int j ...

  5. 字符编码-ASCII,GB2312,GBK,GB18030

    ASCII ASCII,GB2312,GBK,GB18030依次增加,向下兼容. 手机只需要支持GB2312 电脑中文windows只支持GBK 发展历程 如果你使用编译器是python2.0版本,默 ...

  6. SAS 报表输出一些新式控制

    SAS 报表输出一些新式控制 *******************************:*Purpose: 报表*Programm: *Programmor: *Date: *Version: ...

  7. EditPlus 3安装的配置操作

    1.关闭自动保存备份设置 将保存时创建备份文件的钩去掉即可 2.设置字体样式  3.配置编译和运行 运行相当于在控制台执行命令: java -classpath classes Hello 4.设置快 ...

  8. vue2.0-组件传值

    父组件给子组件传值,子组件用props接收 例子:两个组件,一个是父组件标签名是parent,一个是子组件标签名是child,并且child组件嵌套在父组件parent里,大概的需求是:我们子组件里需 ...

  9. ZooKeeper系列(7):ZooKeeper一致性原理

    一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示. 图 1.1 ZooK ...

  10. 安装MySQL半同步复制

    一.简介 从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认 ...