php第二天-函数的用法及封装,变量范围,匿名函数,递归函数
1.函数
<?php
function test($info){
return $info;
} echo test("hello") ?>
输出hello
2.函数实现一个累加
<?php
echo "用函数实现一个累加";
function add($a){
$sum = 0;
for($i = 0;$i <= $a;$i++){
$sum += $i;
}
return $sum;
}
echo "50的累加是:".add(50)."<br>";
echo "100的累加是:".add(100)."<br>"
?>
输出
用函数实现一个累加50的累加是:1275
100的累加是:5050
3.function_exists判断函数是否存在
<?php
function add($a){
$sum = 0;
for($i = 0;$i <= $a;$i++){
$sum += $i;
}
return $sum;
}
var_dump(function_exists('add'))
?>
4.局部变量
<?php
$a = 0;
function print_A(){
$a = 3;
echo "在函数中显示局部变量a值:$a <p>";
return $a;
}
$b = print_A();
echo "在函数外显示局部变量b值:$b <br>";
echo $a; ?>
输出
在函数中显示局部变量a值:3
在函数外显示局部变量b值:3
0
5.全局变量
<?php
$a = 0;
function print_A(){
global $a;
$a = 3;
echo "在函数中显示局部变量a值:$a<p>";
return $a;
}
$b = print_A();
echo "在函数外显示局部变量b值:$b <br>";
echo $a; ?>
输出
在函数中显示局部变量a值:3
在函数外显示局部变量b值:3
3
6.unset可以删除释放变量(内存中删除)
<?php
$a = 1;
function print_A(){
global $a;
unset($a);
$a = 3;
echo "在函数中显示局部变量a值:$a<p>";
return $a;
}
$b = print_A();
echo "在函数外显示局部变量b值:$b <br>";
echo $a; ?>
输出
在函数中显示局部变量a值:3
在函数外显示局部变量b值:3
1
7.静态变量
<?php
function test(){
$a = 0;
echo $a;
$a++;
}
test();
test();
test();
?>
输出000
<?php
function test(){
static $a = 0;
echo $a;
$a++;
}
test();
test();
test();
?>
输出012,因为static会在内存中申请
8.chr传入ascii码,ceil进一法取整
<?php
echo chr(97);
echo '<br>';
echo ceil(5.61);
echo '<br>';
?>
9.引用参数的函数
<?php
function test(&$arg){
$arg = 200;
}
$var = 100;
test($var);
echo $var;
?>
输出200
<?php
function test($arg){
$arg = 200;
}
$var = 100;
test($var);
echo $var;
?>
输出100
10.默认传参
<?php
function test($name = "123")
{
echo $name;
}
test();
echo "<br>";
test(456);
?>
输出123 456
11.可变个数参数函数
<?php
/**
声明一个函数more_args(),用于打印参数列表的值
虽然没有声明参数列表,但可以传入任意个数,任意类型的参数值
*/
function more_args() {
$args = func_get_args(); //将所有传递给脚本函数的参数当做一个数组返回
for($i=0; $i<count($args); $i++) { //使用for循环遍历数组$args
echo "第".$i."个参数是".$args[$i]."<br>"; //分别输出传入函数的每个参数
}
}
more_args("one", "two", "three", 1, 2, 3); //调用函数并输入多个参数
?>
输出
第0个参数是one
第1个参数是two
第2个参数是three
第3个参数是1
第4个参数是2
第5个参数是3
12.func_get_args()函数(返回一个数组,包含所有参数)
<?php
function test(){
var_export(func_get_args());
}
test(1,2,3,4,5);
?>
输出
array ( 0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, )
13.func_num_args()函数(返回参数总数 )
<?php
function test(){
var_export(func_get_args());
echo "<br>";
var_export(func_num_args());
}
test(1,2,3,4,5);
?>
输出
array ( 0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, ) 5
14.func_num_arg()函数(接收一个数字参数,返回指定参数)
<?php
function test(){
var_export(func_get_args());
echo "<br>";
var_export(func_num_args());
echo "<br>";
var_export(func_get_arg(1));
}
test(1,2,3,4,5);
?>
输出
array ( 0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, ) 5 2
<?php
function test(){
for($i=0;$i<func_num_args();$i++){
echo "key==>".$i."value==>".func_get_arg($i);
echo "<br>";
}
}
test("one","two","three","four");
?>
输出
key==>0value==>one
key==>1value==>two
key==>2value==>three
key==>3value==>four
15.回调函数
15.1 call_user_func_array
<?php
function foobar($arg,$arg2){
echo __FUNCTION__,"got $arg and $arg2";
}
call_user_func_array("foobar", array("one","two"));
?>
输出
foobargot one and two
15.2 使用变量函数声明和应用的回调函数
<?php
function test($fun){
$fun("1");
}
function abc($num){
echo $num;
} echo test('abc');
?>
输出1
15.2 类静态函数和对象的方法回调
<?php
/* 声明一个类Demo,类中声明一个静态的成员方法fun() */
class Demo {
static function fun($msg1, $msg2) {
echo '$msg1 = '.$msg1;
echo '<br>';
echo '$msg2 = '.$msg2;
}
}
/* 声明一个类Test, 类中声明一个普通的成员方法fun() */
class Test {
function fun($msg1, $msg2) {
echo '$msg1 = '.$msg1;
echo '<br>';
echo '$msg2 = '.$msg2;
}
} call_user_func_array( array("Demo", 'fun'), array('cywl', '一寸一叶') );
echo "<br>";
call_user_func_array( array(new Test(), 'fun'), array('BroPHP', '学习型PHP框架') );
输出
$msg1 = cywl
$msg2 = 一寸一叶
$msg1 = BroPHP
$msg2 = 学习型PHP框架
16.匿名函数
<?php
$test = function($name){
printf("hello %s\r\n",$name);
};
$test('php');
$test('world');
?>
输出
hello php hello world
<?php
function test($n){
echo $n." "; if($n>0)
test($n-1);
else
echo "<-->";
echo $n." ";
}
test(3);
?>
输出
3 2 1 0 <-->0 1 2 3
php第二天-函数的用法及封装,变量范围,匿名函数,递归函数的更多相关文章
- js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用)
js进阶ajax函数封装(匿名函数作为参数传递)(封装函数引入文件的方式非常好用) 一.总结 2.匿名函数作为参数传递 二.js进阶ajax函数封装 ajax1.js function ajax(ur ...
- python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
- JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)
函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) { return i1 + i2;//如果不写return返回 ...
- PHP匿名函数如何理解,什么是匿名函数
揭秘PHP匿名函数 定义:匿名函数就是没有名字的函数. 有2种形式的匿名函数: 形式1:将一个匿名函数"赋值"给一个变量——此时该变量就代表该匿名函数了! 形式2: 是直接将一个匿 ...
- memset函数及其用法,C语言memset函数详解
在前面不止一次说过,定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构.在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”. 每种类型的变量都有各自的 ...
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...
- 学习Pytbon第十天 函数2 内置方法和匿名函数
print( all([1,-5,3]) )#如果可迭代对象里所有元素都为真则返回真.0不为真print( any([1,2]) )#如果数据里面任意一个数据为真返回则为真a= ascii([1,2, ...
- python基础编程: 编码补充、文件操作、集合、函数参数、函数递归、二分查找、匿名函数与高阶函数
目录: 编码的补充 文件操作 集合 函数的参数 函数的递归 匿名函数与高阶函数 二分查找示例 一.编码的补充: 在python程序中,首行一般为:#-*- coding:utf-8 -*-,就是告诉p ...
- np.random.random()函数 参数用法以及numpy.random系列函数大全
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9751471.html 1.np.random.random()函数参数 np.random.r ...
随机推荐
- 防止用户利用PHP代码DOS造成用光网络带宽
用PHP代码调用sockets,直接用服务器的网络攻击别的IP,常见代码如下: 代码如下:$packets = 0; $ip = $_GET[\'ip\']; $rand = $_GET[\'port ...
- Netty之旅二:口口相传的高性能Netty到底是什么?
高清思维导图原件(xmind/pdf/jpg)可以关注公众号:一枝花算不算浪漫 回复netty01即可. 前言 上一篇文章讲了NIO相关的知识点,相比于传统IO,NIO已经做得很优雅了,为什么我们还要 ...
- C# 根据出生年月 计算天数/计算X岁X月X天字符串
public class TimeTool { //根据出生年月计算 整数天 private static int GetAgeByBirthdate(DateTime birthdate) { Da ...
- Javascript数组与函数初识
1 - 数组 1.1 数组的概念 数组可以把一组相关的数据一起存放,并提供方便的访问(获取)方式. 数组是指一组数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素.数组是一种将一组数 ...
- JDBC的架构设计
本文探讨JDBC需要解决的问题及如何解决和设计的,包括: JDBC要解决的问题 数据库事务 JDBC的架构设计 JDBC代码注意点 Spring是如何处理事务 什么是事务的传播特性 Redis事务与数 ...
- asterisk 传真服务器配置
摘要: asterisk 可以作为电子传真服务器,进行收发电子传真.但是配置起来,比较麻烦,需要一番折腾.在这儿分享一下电子传真的配置,希望对朋友们有所帮助. 正题: asterisk 如果需要收发电 ...
- Unity Prefab关联
Unity3D研究院之Prefab里面的Prefab关联问题http://www.xuanyusong.com/archives/3042
- 面试【JAVA基础】其他
1.自定义注解 @target 说明了Annotation所修饰的对象范围: constructor.method.field.package.type等等. @retention 定义了该Annot ...
- [BUUOJ记录] [BJDCTF2020]The mystery of ip
本题考察XFF头的ssti模板注入,没有过滤,算是入门题 进入题目hint.php的源码中可以看到一个hint 猜测是通过XFF头来获取信息的,发个HTTP请求添加一个XFF头测试一下: GET /f ...
- 亚马逊DRKG使用体验
基于文章:探索「老药新用」最短路径:亚马逊AI Lab开源大规模药物重定位知识图谱DRKG,记录了该项目的实际部署与探索过程,供参考. 1. DRKG介绍 大规模药物重定位知识图谱 Drug Repu ...