设为首页 收藏本站
查看: 324|回复: 0

[经验分享] PHP实践之路(七)PHP函数

[复制链接]

尚未签到

发表于 2017-3-4 12:30:50 | 显示全部楼层 |阅读模式
  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
?>





版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-350200-1-1.html 上篇帖子: PHP 缓存机制 下篇帖子: php header认证登录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表