PHP实践之路(七)PHP函数
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、函数返回值
<?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、可变函数
<?php
function sayHello($name = "somebody"){
echo "Hello ".$name;
}
$func="sayHello";
$func(); //输出Hello somebody
echo "<br />"; //换行
$func("jack"); //输出Hello jack
?>
PHP实践之路(七)PHP函数相关推荐
- C语言自学之路七(函数(重点)详解)
本文所结合图书及视频 <C语言程序设计(第四版)谭浩强.pdf> <C语言入门到精通-鹏哥带你C语言从入门到精通> <郝斌老师的C语言自学视频> 这些在B站上都能找 ...
- 【python3的学习之路七】函数
返回多个值 import mathdef move(x, y, step, angle=0):nx = x + step * math.cos(angle)ny = y - step * math.s ...
- OpenCV实践之路——使用imread()函数读取图片的六种正确姿势
本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51375078 微博:http ...
- 猪八戒网CI/CD最佳实践之路
序言 本文旨在介绍ZBJ DevOps团队倾力打造的DevOps平台中关于CI/CD流水线部分的实践.历经三次大版本迭代更新的流水线,完美切合ZBJ各种业务发展需求,在满足高频率交付的同时,提高了研发 ...
- 云效助力新金融DevOps转型——南京银行实践之路
在2018云栖大会南京峰会企业研发云专场,由南京银行研发管理负责人吴攀带来了"云效助力新金融DevOps转型--南京银行实践之路"的主题分享.首先对南京银行的研发规模与成长做了介绍 ...
- 360内部监控系统Wonder实践之路
女主宣言 Wonder监控系统目前已经是360内部最大.最健全的监控系统.基于open-falcon改造的Wonder,从2016年4月上线至今已经运行了一年多,从最初的"乞丐版" ...
- OpenCV实践之路——人脸识别之一数据收集和预处理
本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/51386949 微博:http ...
- 领域驱动设计(DDD)实践之路(三):如何设计聚合
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/oAD25H0UKH4zujxFDRXu9Q 作者:wenbo zhang [领域驱动设计实践 ...
- OpenCV实践之路——雅虎色情图片检测神经网络试用报告
本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/52821497 微博:http ...
最新文章
- java中队列的类是什么意思_java中LinkedList集合类实现栈和队列要注意什么?
- 欢乐暑假-高校俱乐部暑期线上编程竞赛奖励机制
- 江苏自学考试计算机网络专业,速看,江苏自考本科计算机网络专业介绍
- hdu 5621 KK's Point(数学,推理题)
- 浙江哪个地方的杨梅最出名?
- Windows核心编程_PE文件格式详细介绍
- 在线解mysql_mysql锁表和解锁语句分享
- HUSTOJ(2019)在线判题系统的从零开始搭建过程
- 内部收益率(二分法)
- 【全开源+免费更新】doodoo.js快速入门教程
- 最新复刻李峋爱心表白HTML源代码+超唯美
- 视频编码基础:I帧、P帧 和 B 帧
- Windows 下使用 grub2 制作美观的维护U盘
- 十分钟带汝入门大数据开发语言Scala
- java对称加密与非对称加密
- GateWay网关访问服务出现503的问题解决
- C语言~~自制-拼图游戏
- 一键设置oem品牌信息工具
- envi窗口滤波_ENVI软件操作【数据显示操作——Overlay菜单操作】
- Words of the Start