PHP每日学习小技巧

1.Global引用和Globals全局变量

在声明一个局部变量想在别的方法里调用时可以通过global传参的方法来调用变量,比如:

<?php
$name = "niaho";
function () {
    global $name;
    echo $name;
}

此时的$name变量值才会被输出,因为其为局部变量,在function中并未被定义,直接输出就会报错,global引用后才能被调用输出,不过这样会污染变量。
当然还有另外一种方法,就是全局变量Globals,如果直接

print_r($GLOBALS)

此时输出数组

Array ( [_GET] => Array ( ) [_POST] => Array ( ) [_COOKIE] => Array ( ) [_FILES] => Array ( ) [GLOBALS] => Array *RECURSION* [name] => niaho )

可以看到有被定义的$name值,此时可以直接

<?php
$name = "niaho";
function show() {
    global $name;
    echo $name;
    echo ($GLOBALS['name']);
}
show();

?>

这样就能直接输出GLOBALS中的name值了。

2.static保存值

看如下一段代码:

<?php
function make(){
$num = 1;
$num = $num +1;
return $num.'<hr/>';
}
echo make();
echo make();
echo make();
?>

输出的结果值是222,可以看到num的值并没有累加,一直是保持着赋值为1,然后1+1赋值为2的操作,那么如何进行累加,及保持num的数值不变呢,就要用到static,看代码:

<?php
function make(){
static $num = 1;
$num = $num +1;
return $num.'<hr/>';
}
echo make();
echo make();
echo make();
?>

此时输出结果就为234,static让num的值得以保持并不断累加。

3.三目运算符和双问号

三目运算符

三目运算符可以看作一个if else语句的简写,比如说:

<?php
$var = 1;
echo $var == 1 ? 'yes' : 'no';
?>

该代码块意思就是赋值var变量值为1,如果变量var值等于1,则输出冒号左边第一值yes,否则输出另外右边的值no,转换成if else语句如下:

<?php
$var = 1;
if ($var == 1){
    echo 'yes';
}else {
    echo 'no';
}
?>

问号前面的表达式相当于if语句中的条件,三目运算符也可以嵌套使用,不过并不推荐。

双问号

??是php7新推出的表达式,

c = a ?? b;

表示如果a非空,则c = a,如果a为空,则 c = b;
双问号会先检测问号左边的值是否为空,为空则直接输出右边值,非空则直接输出左边值。
如果想要知道一个变量是否被定义过,用三目运算符可以这么写“

<?php
echo isset($name)?'yes':'no';
?>

因为没有定义过$name的值,因此输出为no,如果用双问号的话就是这么写:

<?php
/* echo isset($name)?'yes':'no'; */
echo $name??'no';
?>

双问号先检测了 n a m e 的 值 是 否 未 定 义 , 检 测 到 未 定 义 , 就 直 接 输 出 了 n o , 如 果 name的值是否未定义,检测到未定义,就直接输出了no,如果 namenoname定义了,则就会输出$name。

4.PHP中的流程替代语法

流程控制(包括if,while,forforeach,switch)这几个语句有替代语法,替代语法的基本形式是左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch; ,上代码说明:

if ( ) {
    
}

常规的这样的流程控制语句可以替代成这样:

if ( ) :

endif;

使用替代语法的好处就是:

1.使HTML和PHP混合页面代码更加干净整齐。

2.流程控制逻辑更清晰,代码更容易阅读,极大增强了代码的可读性。

5.break跳出循环语句

直接看代码:

<?php
$name = 0;
while (true):
    $num++;
    switch ($num) {
        case $num % 2 == 0:
            echo $num . "<hr />";
            break;
        case $num % 15 == 0:
            echo $num . "<hr />";
            break 2;
    }
endwhile;
?>

以上的代码有两个循环,第一层的while语句循环,第二层的是switch语句的循环,当num值被2整除时输出,当num值被15整除时输出,不过当num值能被15整除时break 2意思就是打破while的循环,输出的数就是2 4 6 8 10 12 14 15。

6.引入文件include和require

include

include可以引入别的模板文件,示例101.php如下:

<?php
include '102.php';
?>

而被它引入的模板102.php则代码如下:

<h1>hello!</h1>

include相当于把模板里代码引入过来粘贴在include的位置,在Include前面定义的变量在模板中也是通用的,比如说:
101.php:

<?php
$num = 1;
include '102.html';
?>

102.html:

<h1>
	hello! 
	-  
	<?php echo $num; ?>
</h1>

此时输出的就为 hello! - 1 ,如果没有找到include的模板文件情况下可能就直接运行include下面代码了,不会直接报错,可以写个if语句来输出一个默认模板防止没有找到include要找的模板文件:
101.php:

<?php
if(!@include '103.html'){
    include 'defualt.html';
}
?>

defualt.html:

<h1>hi!</h1>

在找不到模板文件的情况下就直接输出了模板defualt.html文件了,不加@会报错。

require

require在模板文件存在的情况下与include并无太大差别,但是require是强加载,如果模板文件不存在的情况下是会报一个致命错误的,后面代码直接不会运行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值