PHP基础笔记函数global变量
例
代码如下 | 复制代码 |
<?php $a=12;
echo '$a='.$a//输出结果 ?> 输出的结果:$a=24 |
总结:在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用,
代码如下 | 复制代码 |
$glpbal $a; function f() //再看看下面一例 function f() f(); |
上面的实例只是基本的global全局变量知识,下面我们看看复杂点的:
代码如下 | 复制代码 |
//A.php 文件 <?php $a = 0 ; //B.php 文件 <?php |
为什么输出的却是0?!!
在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内(包括include 和 require 导入的文件内的变量)!
解释:A.php文件的内Test_Global是定义好的第三方函数,该函数用include导入了B.php文件内的$a的global全局变量,所以$a被限制在Test_Global局部函数范围内,所以B.php文件内的$a的作用范围都在Test_Global内,而不是作用了整个A.php内….
解决方案:
1. 冲出局部函数
代码如下 | 复制代码 |
//A.php 文件 <?php //B.php 文件 <?php |
global问题解析:
question:我在config.inc.php中定义了一些变量($a),在别的文件中函数外部 include("config.inc.php"),函数内部需要使用这些变量$a,如果没有声明的话,echo $a是打印不出来任何东西的。因此声明global $a,但是有很多函数和很多变量,总不能不断重复的这样声明吧?有什么好的解决办法,请指点。
answer1:先在config.inc.php里定义常量:define(常量名,常量值)
再在其他需要用到的地方require 'config.inc.php',
然后就能在这个文件里直接使用这个常量了。
answer2:我也有个办法,就是定义数组,如$x[a],$x,那样就只要声明global $x一个了。
answer3:我试了你的这个方法,不行啊。
answer4:改你的php.ini文件。
今天在老王的技术手册看到一个问题:
代码如下 | 复制代码 |
<?phpif ($a = 100 && $b = 200) { var_dump($a, $b);} |
输出是什么?
这个问题, 咋一看或许觉得简单, 但其实仔细推敲并不简单,
如果说布尔与之前的部分, 是由于优先级的问题, 但是如果仅仅是优先级的问题的话, 那么结果应该是:
代码如下 | 复制代码 |
$a = (100 && $b) = 200 |
而实际上的结果, 确实高优先级的&&让步给次优先级的=, 让 $b = 200 先结合了.
究其原因, 是因为PHP并不完全遵守优先级的定义, 这个在PHP的手册中也有说明:
Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.
这样的设计, 个人不发表看法, 反正在C语言中, 这样类似的语句是判定为语法错的. PHP采用这样的设计, 很可能是历史原因,
有好奇的同学, 会想知道到底为什么, 之前jayeeliu网友也问过:
laruence你好:
问一个php运算符优先级的问题
代码如下 | 复制代码 |
$t == 1 && $tt = 2 |
按照php运算符优先级应该是
代码如下 | 复制代码 |
(($t == 1) && $tt) = 2 |
这个顺序执行,但实际上应该是
代码如下 | 复制代码 |
($t == 1) && ($tt = 2) |
我有些不太理解。
其实也简单, 运算符优先级是在存在二义性文法的时候的一种规约规则选择的手段, 而PHP的语法分析文件定义中, 却让等号和T_BOOLEAN_AND(&&)之前不存在了规约冲突:
代码如下 | 复制代码 |
expr_without_variable: |
最后, 顺便说一下, PHP对应于T_BOOLEAN_AND 还定义了 T_LOGICAL_AND(and) 和 T_LOGICAL_OR(or) , 这俩个的优先级都低于等号, 于是就会有了, 很多PHP入门教材示例代码中经典的:
代码如下 | 复制代码 |
$result = mysql_query(*) or die(mysql_error()); |
类似的还可以用or来实现三元操作符(?:)的功能:
代码如下 | 复制代码 |
$person = $who or $person = "laruence"; |
//等同于:
代码如下 | 复制代码 |
$person = empty($who)? "laruence" : $who; |
结合方向 |
运算符 |
---|---|
左 | , |
左 | or |
左 | xor |
左 | and |
右 | |
右 | = += -= *= /= .= %= &= |= ^= ~= <<= >>= |
左 | ? : |
左 | || |
左 | && |
左 | | |
左 | ^ |
左 | & |
无 | == != === !== |
无 | < <= > >= |
左 | << >> |
左 | + - . |
左 | * / % |
右 | ! ~ ++ -- (int) (float) (string) (array) (object) @ |
右 | [ |
无 | new |
① 创建数组第一种方法
$arr[0]=123;
$arr[1]=90;
….
概念:
[0] -> 这个我们称为下标,或者称为 关键字
$arr[0] -> 这个称为数组的一个元素.
$arr[0]=123; 123 表示该$arr[0]元素对应的值
$arr –》这个是该数组的名称.
☞在php数组中,元素存放的值可以是任意数据数据类型
② 创建数组的第二种方法
基本语法
$数组名=array(值1,值2,.......);
举例说明:
$arr=array(1,90,"helllo",89.5);
③ 第三种方式创建数组(在默认情况下,我们的元素的下标,是从0开始给你编号,但是实际上,也可以自己指定)
基本语法$arr[‘logo’]=”北京”;
$arr[’hsp’]=123;
....
或者
$arr=array(”logo”=>”北京”,”hsp”=>123,4=>678);
数组的遍历方法:
注: 如果使用 for while do..while 要确定该数组的下标是从 0开始顺序排放
数组共有多少个元素,可以使用系统函数count
//
代码如下 | 复制代码 |
for循环遍历方法 //while循环遍历方法 //do..while //foreach 遍历方法 |
php的数组相关的函数
① count 函数
基本用法是
count($数组名); 可以统计该数组共有多少元素.
② is_array
③ print_r 和 var_dump
④ explode 对字符串进行分割
案例:
$str="浙江&台州&杭州";
//在实际开发中,涉及到字符串的拆分,可以考虑
$arr=explode("&",$str);
print_r($arr);
数组查找
例子:
代码如下 | 复制代码 |
<?php |
例子输出结果如下:
键名为:0
array_key_exists()函数
如果在一个数组中找到一个指定的键,函数array_key_exists()返回true,否则返回false。其形式如下:
boolean array_key_exists(mixed key,array array);
下面的例子将在数组键中搜索apple,如果找到,将输出这个水果的颜色:
代码如下 | 复制代码 |
$fruit["apple"] = "red"; |
执行这段代码得到的结果:
apple's color is red
合并数组
array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加。其形式为:
Php代码
array array_merge (array array1 array2…,arrayN)
这个函数将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
代码如下 | 复制代码 |
<?php // output |
2. 追加数组
array_merge_recursive()函数与array_merge()相同,可以将两个或多个数组合并在一起,形成一个联合的数组.两者之间的区别在于,当某个输入数组中的某个键己经存在于结果数组中时该函数会采取不同的处理方式.array_merge()会覆盖前面存在的键/值对,替换为当前输入数组中的键/值对,而array_merge_recursive()将把两个值合并在一起,形成一个新的数组,并以原有的键作为数组名。还有一个数组合并的形式,就是递归追加数组。其形式为:
Php代码
array array_merge_recursive(array array1,array array2[…,array arrayN])
程序实例如下:
代码如下 | 复制代码 |
<?php // output |
现在键 apple 指向一个数组,这个数组由两个颜色值组成的索引数组。
3. 连接数组
array_combine()函数会得到一个新数组,它由一组提交的键和对应的值组成。其形式为:
array array_combine(array keys,array values)
注意,两个输入数组必须大小相同,不能为空。示例如下
代码如下 | 复制代码 |
// output
|
4. 拆分数组 array_slice()
array_slice()函数将返回数组中的一部分,从键offset开始,到offset+length位置结束。其形式:
Php代码
array array_slice (array array, int offset[,int length])
offset 为正值时,拆分将从距数组开头的offset 位置开始;如果offset 为负值,则拆分从距数组末尾的offset 位置开始。如果省略了可选参数length,则拆分将从offset 开始,一直到数组的最后一个元素。如果给出了length 且为正数,则会在距数组开头的offset+length 位置结束。相反,如果给出了length且为负数,则在距数组开头的count(input_array)-|length|位置结束。考虑一个例子:
代码如下 | 复制代码 |
<?php $fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon"); // output |
数组排序(下面方法用于一维数组)
•sort() 函数用于对数组单元从低到高进行排序。
•rsort() 函数用于对数组单元从高到低进行排序。
•asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
•arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
•ksort() 函数用于对数组单元按照键名从低到高进行排序。
•krsort() 函数用于对数组单元按照键名从高到低进行排序。
多维数组排序
比如有个多为数组:
代码如下 | 复制代码 |
$arr = array( |
需要对二维数组中的 age 项排序。
需要用到PHP的内置函数 array_multisort(),可以看手册。
自定义函数:
代码如下 | 复制代码 |
function multi_array_sort($multi_array,$sort_key,$sort=SORT_ASC){ //处理 echo “<pre/>”; //输出 Array [b] => Array [a] => Array [d] => Array ) |
written by 大宇
在php中循环语句包括了很多,如有:for,foreach,while,do while,goto语句,下面我来给大家简单的介绍这些循环语句结构用法。for 循环控制
for(循环初值; 循环的条件; 步长){
//执行语句;
}
例
代码如下 | 复制代码 |
FOR ($i = 0; $i <= 2; $i++) |
输出值
value is now 0
value is now 1
value is now 2
在第一循环,$i=0,这意味着表达,($i<= 2),为ture。因此,打印语句执行时,$i得到加1,变成1。
在第二循环,$ = 1,这意味着表达,($i<= 2),为ture。因此,打印语句执行时,$i得到加1,变成2。
在第三迭代,$i= 2,这意味着表达,($i<= 2),为ture。因此,打印语句执行时,$i递增,成为1 3。
在第四迭代,$i= 3,这意味着表达,($i<= 2),是假的。因此,PHP不去执行循环,不执行打印语句。
while循环
基本语法结构是
while(循环条件){
//执行语句;
//循环条件值变化,不添加的话会成为死循环
}
例
代码如下 | 复制代码 |
<html><body> |
还是举个简单的例子,一看就明白了。下面这个例子,使用到了 while 循环语句,它的意思是,当变量 $a 小于等于5的情况下,执行一次循环,该循环执行连个语句,一是输出 $a 的值,二是给 $a 的值加1,直到 $a 小于等于 5 为 FALSE,即 $a > 5才停止循环。
do..while循环控制
基本语法结构
do{
//执行语句;
//循环条件值变化,不添加的话会成为死循环
}while(循环条件);
例
示例如下,该示例中,先执行一次循环,即 $i 加 1,然后输出 $i 的值,执行完第一次循环之后,检查条件 $i < 5,如果符合条件,则再执行一次循环,直到 $i < 5 为 FALSE 为止。
代码如下 | 复制代码 |
<html><body> |
循环相关的语句-break
基本的概念: 表示结束当前的 for 、 while 、do..while 、switch, 流程, 可以给一个数字,表示退出到第几层.
1. break语句 默认跳出 1层
2. break语句 后面带的数字,不能超过实际可以跳出的循环层数,否则,会报fatal error
循环相关的语句-continue
基本概念: continue 用于结束本次循环剩余代码,从新开始新的一次循环(如果条件为真,就继续执行), continue 后面也可以带数字,表示从第几次循环重新开始
goto语句
基本概念: 通过goto语句我们可以将程序跳转到指定的地方去执行.
goto 标签;
标签:
语句;
快速入门案例:
代码如下 | 复制代码 |
goto a; echo 'aa'; a: echo 'bb'; |
php中常量
说明:
所谓常量,我们可以理解成就是特殊的变量: 体现在
1. 定义常量前面不需要 $
2. 常量一旦定义,则不能修改其值
3. 常量在定义的时候,就需要它赋初值.
4. 常量可以通过 define 或者 const
5. 常量的名称,我们一般说是 全部大写,然后用下划线间隔
6. 什么时候需要使用常量: 在程序中我们不希望某个值变化,则考虑使用常量,比如圆周率,税率....
快速入门案例:
代码如下 | 复制代码 |
<?php
define("TAX_RATE",0.08); //第二种方法(php5.3) const TAX_RATE2=0.1; ?> |
if单分支的基本语法结构
if(条件表达式){
//执行语句;
}
if双分支
基本语法结构
if(条件表达式){
//执行语句;
}else{
//执行语句;
}
if多重分支
基本语法结构是
if(条件表达式){
//执行语句;
}else if (条件表达式){
//执行语句;
}else if(条件表示式){
//执行语句;
}else{//这里可能还有更多的else if
//执行语句;
}
☞ 对上面的结构请注意:
1) else if 可以有一个,也可以有多个
2) else 可以没有
例
代码如下 | 复制代码 |
<html> <?php |
switch分支语句
基本语法结构
switch(表达式){
case 常量1:
//执行语句;
break;
case 常量2:
//执行语句;
break;
defual:
//执行语句;
break;
}
例
下面两个例子用不同方法实现同样的事情,第一个是用 if...elseif...else 语句,一个使用 switch语句。
代码如下 | 复制代码 |
<?phpif ($i == 0) { echo "i equals 0";} elseif ($i == 1) { echo "i equals 1";} elseif ($i == 2) { echo "i equals 2";} else { echo "i is not equal to 0, 1 or 2"; } ?> |
上面这段 PHP 代码的意思是:如果变量 $i 等于 0,则输出 "i equals 0";如果变量 $i 等于 1,则输出 "i equals 1";如果变量 $i 等于 2,则输出 "i equals 2";如果都不是,则输出"i is not equal to 0, 1 or 2"。
switch 语句和 elseif 语句的比较
在 switch 语句中,条件只求一次,然后和每个 case 比较,而在 elseif 语句中,条件会再次求值。如果你的条件比较复杂,或者是多次循环,用 switch 语句速度会更加快些。
代码如下 | 复制代码 |
isEmpty=""; $isEmpty=" 非空 "; $test = empty($isEmpty)?"":trim($isEmpty); |
三目运算符?: 根据前面的条件empty($isEmpty)true或者false,条件为true时,计算?后面的表达式,false时计算:后面的表达式。
如果不习惯可以改成如下代码
代码如下 | 复制代码 |
if (empty($isEmpty)) //条件成立 { { $cookie = trim($isEmpty);
}
|
☞ 请注意:
1) case 语句有一到多
2) defaul 语句可以没有(根据自己代码的业务逻辑)
3) 通常,在case 语句后,要带break ,表示退出switch语句
4) 常量的类型 (int, float, 字符串, 布尔型)
补充
比较运算符。
$a == $b 等于 TRUE,如果 $a 等于 $b。
$a != $b 不等 TRUE,如果 $a 不等于 $b。
$a <> $b 不等 TRUE,如果 $a 不等于 $b。
$a < $b 小与 TRUE,如果 $a 严格小于 $b。
$a > $b 大于 TRUE,如果 $a 严格 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。
逻辑运算符。
$a and $b And(逻辑与) TRUE,如果 $a 与 $b 都为 TRUE。
$a or $b Or(逻辑或) TRUE,如果 $a 或 $b 任一为 TRUE。
$a xor $b Xor(逻辑异或) TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。
! $a Not(逻辑非) TRUE,如果 $a 不为 TRUE。
$a && $b And(逻辑与) TRUE,如果 $a 与 $b 都为 TRUE。
$a || $b Or(逻辑或) TRUE,如果 $a 或 $b 任一为 TRUE。
相关文章
- eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
- 下面本文章来给大家介绍在php中成员变量的一些对比了,文章举了四个例子在这例子中分别对不同成员变量进行测试与获取操作,下面一起来看看。 有如下4个代码示例,你认...2016-11-25
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 本文主要介绍了C#变量命名规则小结,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-09
- 本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
- 下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要介绍了R语言删除指定变量或对象的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-06
- CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
解决vue的router组件component在import时不能使用变量问题
这篇文章主要介绍了解决vue的router组件component在import时不能使用变量问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
Android开发中findViewById()函数用法与简化
findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20- strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
- 这篇文章主要介绍了Vue select 绑定动态变量的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-23
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07- Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
- free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
- 在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型,在使用的时候,需要注意这一点。看到网友在讨论PHP的&符号,要彻底理解它的用法,就有必要讨论一下变量的两种形式。PHP的变量在内存中是这样...2015-10-23
- PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31