首页 > 编程技术 > php

PHP的三种类型的运算符

发布时间:2016-11-25 14:57

在php中运算符有常用的三种了如有一元运算符,二元运算符,三元运算符了,下面来简单的介绍一下吧。


运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西。

第一种是一元运算符,只运算一个值,例如 !(取反运算符)或 ++(加一运算符)。

例子

1、++i 的用法(以 a=++i ,i=2 为例)

先将 i 值加 1 (也就是 i=i+1 ),然后赋给变量 a (也就是 a=i ),

则最终 a 值等于 3 , i 值等于 3 。

所以 a=++i 相当于 i=i+1 ,a=i

2、i++ 的用法(以 a=i++ ,i=2 为例)

先将 i 值赋给变量 a (也就是 a=i ),然后 i 值加 1 (也就是 i=i+1 ),

则最终 a 值等于 2 ,i 值等于 3 。

所以 a=i++ 相当于 a=i , i=i+1

3、++i 与 i++

a=++i 相当于 i++ , a=i

a=i++ 相当于 a=i , i++

4、++i 与 i++ 单独使用时,相当于 i=i+1

如果赋给一个新变量,则 ++i 先将 i 值加 1 ,而 i++ 先将 i 赋给新变量

第二种是二元运算符,可接受两个值,例如熟悉的算术运算符 +(加)和 -(减),大多数 PHP 运算符都是这种

$a =1+2;
$b =3-1;

第三种是三元运算符,可接受三个值,它应该被用来根据一个表达式在另两个表达式中选择一个,而不是用来在两个语句或者程序路线中选择。(也可称之为条件运算符可能更合适)

代码格式如下:(expr1) ? (expr2) : (expr3);

例如:$page = !empty( $_GET['page'] ) ? $_GET['page'] : 1;

PHP流程控制的替代语法示例,有需要了解的朋友可进入参考。

了解过wordpress一类博客程序的模板的PHPer都会看到很多奇怪的PHP语法,比如:
<?php if(empty($GET_['a'])): ?>
<font color=”red”>空的</font>
<?php endif; ?>
对于一部分PHPer根本没见过这些是什么东西呢?难道是那些博客的开发者自己搞的仿PHP的模板语言?
非也,其实这些都是PHP的语法,只不过不常用而已,这些都是PHP流程控制的替代语法。
这里就就给大家详细说一下PHP流程控制的替代语法。什么是替代语法?
简单的说就是一些语法的另类写法。
PHP中那些语法有替代语法?
流程控制(包括if,while,foreach,switch)这几个语句有替代语法。
替代语法的基本形式:
左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;
举个例子吧:

是负数拉

上面的语句等同于

是负数拉
为什么纯PHP代码里面几乎看不到?
这些语法有点不符合C家族的传统有点另类,大家不大习惯于这种语法,而且不是很方便
大家都不习惯,而且这么另类要他有什么用?蛋疼吗?
存在就是合理,它自有它的用处,这些语法能发挥的地方是在PHP和HTML混合页面的代码里面。好处如下:
1.使HTML和PHP混合页面代码更加干净整齐。
有代码洁癖的朋友最惧怕的就是乱七八糟的混合代码,有了这些没有花括号的替代语法,各位爱干净的朋友开心到尿震。
2.流程控制逻辑更清晰,代码更容易阅读
要改别人的PHP和HTML混合代码,打开发现,我擦!太TMD垃圾了!如果用替代语法,我想再垃圾的程序开发人员也不至于写的太乱吧。
3.一些从ASP等其他类basic语言家族转来的朋友,会更容易使用PHP。
讲半天没用的,捞点干的行不?这东西怎么用?
根据之前描述的使用方法,if语句的替代语法使用如下:
<?php if ($a == 5): ?>
<div>等于5</div>
<?php elseif ($a == 6): ?>
<div>等于5</div>
<?php else: ?>
<div>不是5就是6</div>
<?php endif; ?>
while替代语法:
<?php while (expr): ?>
<li>循环点什么</li>
<?php endwhile; ?>
for替代语法:
<?php for (expr1; expr2; expr3): ?>
<li>循环点什么</li>
<?php endfor; ?>
foreach替代语法:
<?php foreach (expr1): ?>
<li>循环点什么</li>
<?php endforeach; ?>
switch替代语法:
<?php
switch ($i):
case 0:
echo “i equals 0″;
break;
case 1:
echo “i equals 1″;
break;
case 2:
echo “i equals 2″;
break;
default:
echo “i is not equal to 0, 1 or 2″;
endswitch;
?>

赋值是php中开发中最常用的的基础知识点了,在php中赋值分为传值赋值和引用赋值了,下文我们就一起来看看传值赋值和引用赋值的用法与区别。

传值赋值:是把实参的值赋值给行参 ,那么对行参的修改,不会影响实参的值.
例如:根copy是一样的。打个比方,我有一?H房子,我给你建筑材料,你建了一个根我的房子一模一样的房子,你在你的房子做什么事都不会影响到我,我在我的房子里做什么事也不会影响到你,彼此独立。

 代码如下 复制代码

$aa=1;
$bb=2;
$aa=$bb;//$aa和$bb互不相干
$aa=3;
echo $aa,'--',$bb;//输出3--2

引用赋值:真正的以地址的方式传递参数传递以后,行参和实参都是同一个对象,只是他们名字不同而已对行参的修改将影响实参的值
例如:让我想起了上大学时学习C语言的指针了,感觉差不多。打个比方,我有一?H房子,我给你一把钥匙,我们二个都可以进入这个房子,你在房子做什么都会影响到我。

 代码如下 复制代码

$aa=1;
$bb=2;
$aa=&$bb;//$bb引用内容指向$aa,不管$aa,或者$bb发生变化,彼此都会变化
$aa=3;
echo $aa,'--',$bb;//输出3--3

在php中清除字符串中空格我们可以有很多方法,但清除数组中所有值的前后代码我们并不能简单的使用这些方法,下面整理了一个例子。

使用php独有的array_map函数遍历清除数组中所有字符串的两端空格

 

 代码如下 复制代码

function TrimArray($Input){

    if (!is_array($Input))
        return trim($Input);

    return array_map('TrimArray', $Input);
}

/*

Old version (v0.1):

function TrimArray($arr){
    if (!is_array($arr)){ return $arr; }

    while (list($key, $value) = each($arr)){
        if (is_array($value)){
            $arr[$key] = TrimArray($value);
        }
        else {
            $arr[$key] = trim($value);
        }
    }
    return $arr;
}
*/

//演示范例:
$DirtyArray = array(
    'Key1' => ' Value 1 ',
    'Key2' => '      Value 2      ',
    'Key3' => array(
        '   Child Array Item 1 ',
        '   Child Array Item 2'
    )
);

$CleanArray = TrimArray($DirtyArray);

var_dump($CleanArray);

 
Result will be:

array(3) {
  ["Key1"]=>
  string(7) "Value 1"
  ["Key2"]=>
  string(7) "Value 2"
  ["Key3"]=>
  array(2) {
    [0]=>
    string(18) "Child Array Item 1"
    [1]=>
    string(18) "Child Array Item 2"
  }
}

在源码中输入换行但是不显示像br 之类的字符我们需要通过php地转义字符来实现了,下文就一起来看看吧。

知识扩充

转移序列 说明
n 换行
r 回车
t 水平制表符
[/td> 反斜线
$ 美元符号
" 双引号
[0-7]{1,3} 此正则表达式序列匹配一个用八进制符号表示的字符
x[0-9A-Fa-f]{1,2} 此正则表达式序列匹配一个用十六进制符号表示的字符

用双引号(")定义字符串,PHP 懂得更多特殊字符的转义序列:


PHP默认页面编码为HTML,要使输出的内容换行,必须使用HTML的换行标签”<br>”或”<br />”
,当使用PHP做http api时,处理br标签稍显麻烦,此时可以指定PHP页面编码,使”\n”成功解析为换行.

 代码如下 复制代码

<?php
header("Content-type:text/txt; charset=gb2312");
for ($i=0; $i < 100; $i++) {
    echo "string"; 
    echo "\n";
?>

用浏览器访问,会直接显示100行”string”.
也可以将页面编码声明为

 代码如下 复制代码


header("Content-Type: plain/text; charset=gb2312");

此时用浏览器访问,会自动下载为文档,用代码下载没有区别.

txt文件使用fwrite换行写入时换行符不起作用

php的换行符我们都知道:\n ,回车符:\r,在需要换行时,通常是用“\r\n”这个组合。但是为什么我们在使用fwrite写入文件时\n换行符不起作用呢。我们先看下面这个例子:

 代码如下 复制代码

<?php
$filename = 'file.txt';
$word = '你好!\r\n欢迎来到www.111cn.net';
$fh = fopen($filename, "a"); //w从开头写入 a追加写入
echo fwrite($fh, $word);
fclose($fh);
?>

$word的字符串内加上了回车换行符“\r\n”,但是输出结果并不是预期,这个回车换行符“\r\n”并没有被解析为换行符,而是直接被当作一个字符输出来了。

为什么会出现这样的情况呢?经研究,原来是单双引号惹的祸!我们把$word定义字符串的单引号“'”换为双引号“"”就可以了。正确的写法如下:

 代码如下 复制代码

<?php
$filename = 'file.txt';
$word = "你好!\r\n欢迎来到www.111cn.net";
$fh = fopen($filename, "a"); //w从开头写入 a追加写入
echo fwrite($fh, $word);
fclose($fh);
?>

题外话,上述例子里echo fwrite()显示的一个数字,这个数字表示字符串的长度

标签:[!--infotagslink--]

您可能感兴趣的文章: