PHP实践之路(目录索引)

PHP函数

1、函数名

a、函数名以字母或下划线打头,后面跟字母,数字或下划线(大小写无关)

b、所有函数和类都具有全局作用域,可以在内部定义外部调用,反之亦然。

c、不支持函数重载,也不可能取消定义或者重定义已声明的函数

d、函数的调用必须是先定义后使用

e、任何有效的 PHP 代码都有可能出现在函数内部,甚至包括其它函数和类定义

接下来实验一下

<?php
function foo(){
echo "Hello World<br />";
}
foo();  //函数的调用,输出Hello World
/*
此处函数重复定义,因为函数名大小写无关,所以函数foo和函数FOO被认为是同一个函数,编译
报错:Fatal error: Cannot redeclare FOO()
function FOO(){
echo "do something";
}
*/
function outer(){
echo "outer function executed..<br />";
//函数内部定义函数
function inner(){
echo "inner function executed..<br />";
}
}
//如果根据函数调用必须是先定义的规则,如果我们直接调用inner()函数将出错
//inner();      //此处出错:Fatal error: Call to undefined function inner()
//如果我们先调用outer()函数,然后再调用innner()函数就好了,调用outer()后,inner()函数将被认为是已定义
outer();    //输出 outer function executed..
inner();    //函数具有全局作用域,内部定义外部也可以使用。输出 inner function executed..
?>

2、函数参数

a、函数参数的传递有三种方式:按值传递、引用传递和默认参数三种

b、任何默认参数必须放在任何非默认参数的右侧

c、可变参数列表,支持不固定参数个数及类型的参数传递方式。可变参数列表方式必须使用func_num_args(),func_get_arg() 以及func_get_args()三个函数

针对以上知识点,我们动动手吧

<?php
//按值传递参数
function sayHello($name){
$name="[".$name."]";   //修改$name的值
echo "Hello ".$name."<br />";
}
$name = "jack";
sayHello($name);    //输出Hello [jack]
echo $name;         //$name没有发生变化,输出jack
echo "<br />";      //换行
//引用传递
function sayHello2(&$name){
$name="[".$name."]";   //修改$name的值
echo "Hello ".$name."<br />";
}
sayHello2($name);   //输出Hello [jack]
echo $name;         //$name已经发生了变化,输出[jack]
echo "<br />";      //换行
//默认参数
function sayHello3($name = "somebody"){
$name="[".$name."]";   //修改$name的值
echo "Hello ".$name."<br />";
}
sayHello3();        //采用默认参数值,输出Hello [somebody]
sayHello3("lucy");    //采用传递的参数值,输出Hello [lucy]
//任何默认参数必须放在任何非默认参数的右侧
/*
以下函数的定义将导致调用sayMore("How do you do");出错,它默认将传入的参数
赋值给了$name,而$more的值确遗失了
function sayMore($name = "somebody",$more){
$name="[".$name."]";
echo "Hello ".$name." ".$more."<br />";
}
*/
function sayMore($more,$name = "somebody"){
$name="[".$name."]";
echo "Hello ".$name." ".$more."<br />";
}
sayMore("How do you do");     //输出Hello [somebody] How do you do
//以下测试可变参列表的使用
function showFamilyMembers(){
$num = func_num_args();        //通过func_num_args()函数获取参数的数量
for($i=0;$i<$num;$i++){
echo func_get_arg($i);      //通过func_get_arg()函数获取具体某个参数的值
echo " ";
}
echo "<br />";      //换行
}
showFamilyMembers("jack","lucy");       //输出:jack lucy
showFamilyMembers("jack","lucy","lily");      //输出:jack lucy lily
//第二种方式获取参数列表
function showFamilyMembers2(){
$members=func_get_args();      //通过func_get_args()函数获取参数列表
foreach($members as $member){
echo $member;
echo " ";
}
echo "<br />";      //换行
}
showFamilyMembers2("jack","lucy");      //输出:jack lucy
showFamilyMembers2("jack","lucy","lily");     //输出:jack lucy lily
?>

3、函数返回值

a、函数只能返回一个值,如果需要返回多个值时可以采用返回数组的方式
b、从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用操作符 &
函数的返回值这块相对比较简单,需要了解的内容也比较少,接下来简单测试一下
<?php
function getOneColor(){
return "red"; //返回一个值
}
function getMoreValue(){
$arr=array("red","blue","orange");   //返回多个值
return $arr;
}
echo(getOneColor());    //输出val1
echo "<br />";
var_dump(getMoreValue());
/*输出
array (size=3)
0 => string 'red' (length=3)
1 => string 'blue' (length=4)
2 => string 'orange' (length=6)
*/
echo "<br />";
/********以下测试返回引用***********/
class test {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new test;
$myValue = &$obj->getValue();
echo $myValue;                // 输出42
echo "<br />";
$obj->value = 2;
echo $myValue;                // 输出2
?>

4、可变函数

a、变量后面跟上圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它
b、可变函数一般用来实现函数的回调
实验时间
<?php
function sayHello($name = "somebody"){
echo "Hello ".$name;
}
$func="sayHello";
$func();        //输出Hello somebody
echo "<br />";  //换行
$func("jack");    //输出Hello jack
?>

PHP实践之路(七)PHP函数相关推荐

  1. C语言自学之路七(函数(重点)详解)

    本文所结合图书及视频 <C语言程序设计(第四版)谭浩强.pdf> <C语言入门到精通-鹏哥带你C语言从入门到精通> <郝斌老师的C语言自学视频> 这些在B站上都能找 ...

  2. 【python3的学习之路七】函数

    返回多个值 import mathdef move(x, y, step, angle=0):nx = x + step * math.cos(angle)ny = y - step * math.s ...

  3. OpenCV实践之路——使用imread()函数读取图片的六种正确姿势

    本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51375078 微博:http ...

  4. 猪八戒网CI/CD最佳实践之路

    序言 本文旨在介绍ZBJ DevOps团队倾力打造的DevOps平台中关于CI/CD流水线部分的实践.历经三次大版本迭代更新的流水线,完美切合ZBJ各种业务发展需求,在满足高频率交付的同时,提高了研发 ...

  5. 云效助力新金融DevOps转型——南京银行实践之路

    在2018云栖大会南京峰会企业研发云专场,由南京银行研发管理负责人吴攀带来了"云效助力新金融DevOps转型--南京银行实践之路"的主题分享.首先对南京银行的研发规模与成长做了介绍 ...

  6. 360内部监控系统Wonder实践之路

    女主宣言 Wonder监控系统目前已经是360内部最大.最健全的监控系统.基于open-falcon改造的Wonder,从2016年4月上线至今已经运行了一年多,从最初的"乞丐版" ...

  7. OpenCV实践之路——人脸识别之一数据收集和预处理

    本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51386949 微博:http ...

  8. 领域驱动设计(DDD)实践之路(三):如何设计聚合

    本文首发于 vivo互联网技术 微信公众号  链接:https://mp.weixin.qq.com/s/oAD25H0UKH4zujxFDRXu9Q 作者:wenbo zhang [领域驱动设计实践 ...

  9. OpenCV实践之路——雅虎色情图片检测神经网络试用报告

    本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/52821497 微博:http ...

最新文章

  1. java中队列的类是什么意思_java中LinkedList集合类实现栈和队列要注意什么?
  2. 欢乐暑假-高校俱乐部暑期线上编程竞赛奖励机制
  3. 江苏自学考试计算机网络专业,速看,江苏自考本科计算机网络专业介绍
  4. hdu 5621 KK's Point(数学,推理题)
  5. 浙江哪个地方的杨梅最出名?
  6. Windows核心编程_PE文件格式详细介绍
  7. 在线解mysql_mysql锁表和解锁语句分享
  8. HUSTOJ(2019)在线判题系统的从零开始搭建过程
  9. 内部收益率(二分法)
  10. 【全开源+免费更新】doodoo.js快速入门教程
  11. 最新复刻李峋爱心表白HTML源代码+超唯美
  12. 视频编码基础:I帧、P帧 和 B 帧
  13. Windows 下使用 grub2 制作美观的维护U盘
  14. 十分钟带汝入门大数据开发语言Scala
  15. java对称加密与非对称加密
  16. GateWay网关访问服务出现503的问题解决
  17. C语言~~自制-拼图游戏
  18. 一键设置oem品牌信息工具
  19. envi窗口滤波_ENVI软件操作【数据显示操作——Overlay菜单操作】
  20. Words of the Start

热门文章

  1. oracle客户端位数怎么看,【转】如何查看Oracle客户端版本及位数(Windows系统)...
  2. Grizzly研究 (一)
  3. IIS设置最大请求处理时间
  4. Win10系统电脑截屏快捷键方法介绍
  5. 在ArcGIS中提取所需地方区域的shp
  6. Selinux是什么?
  7. 蚂蚁感冒,蓝桥杯,简易AC代码讲解
  8. 技术前沿与经典文章10:信息论之父香农,20世纪伟大的科学家,一个理论改变了一个时代
  9. 小程序滑动屏幕切换视频
  10. 教你设置无线路由器 (Mercury图解)