php中运算符使用方法总结

 更新时间:2016年11月25日 15:03  点击:2307

算术运算符

1、算术运算符:+、-、*、/、%。

2、递增/递减运算符:如$a++,$a--,++$a,--$a.

如:

 代码如下 复制代码

<?php
$a=10;
$b=5;
$c=$a++; //先赋值,后自增。$c=$a,$a=$a+1
$d=$b--; //先赋值,后自减。$d=$b,$b=$a-1
echo '$a='.$a."||".'$c='.$c.'<br/>'; //$a=11,$c=10
echo '$b='.$b."||".'$d='.$d.'<br/>'; //$b=4,$d=5
?>

<?php
$a=10;
$b=5;
$c=++$a; //先自增,后赋值。$a=$a+1,$c=$a
$d=--$b; //先自减,后赋值。$b=$a-1, $d=$b
echo '$a='.$a."||".'$c='.$c.'<br/>'; //$a=11,$c=11
echo '$b='.$b."||".'$d='.$d.'<br/>'; //$b=4,$d=4
?>

三元运算符

(expr1) ? (expr2) : (expr3);
解释:如果条件“expr1”成立,则执行语句“expr2”,否则执行“expr3”。


以下语句的语法是正确的,它们以小解引号的方式忽略了第二或第三“元”:

 代码如下 复制代码
$a>$b ? print "Yes" : "";
$a>$b ? '': print 'No';

应该注意的是:在使用三元运算符时,建议使用print语句替代echo语句。

注意下列一串语句的理解:

 代码如下 复制代码

$str = $_GET['abc'] ? 'wangjinbo' : 'wjb';

这里不能理解为:当$str等于$_GET['abc']  时,赋值为 'wangjinbo'  否则赋值为 'wjb';因为一:判断相等应该用==;因原二:三元算符的语法是如上所示:(expr1) ? (expr2) : (expr3),显然上面的二元,三元'wangjinbo'或'wjb'不能单独构成一个有意义的表达式;

正确理解是:当$_GET['abc']为空(也就是否,PHP中 '',null,0,undifine,都等效布尔值false)时,将$str赋值为'wangjinbo',否则赋值为'wjb';

逻辑运算符:

如:

 代码如下 复制代码

$a=10;$b=7;
if($a++>8 || $b++>7){ //$a++>8为真,$b++>7这个就不执行了
echo 'OK!';
}
echo 'a='.$a.'b='.$b; // 输出OK,a=11,b=7

改变一下

$a=10;$b=7;
if($a++>10 && $b++>7){ //$a++>8为假,$b++>7这个就不执行了
echo 'OK!';
}
echo 'a='.$a.'b='.$b; // a=11,b=7

细节:and && 都表示逻辑与 ,他们的区别在什么地方?

主要体现在优先级上面

and 的优先级

 代码如下 复制代码
and< = <&&
or < = < ||
如:
$a=false || true; //&& > = > and ;先比较false || true,再赋值
$b=false or true; //|| > = > or ;先赋值$b=false,再比较,所以结果是false
var_dump($a,$b); //bool(true) bool(false)


位运算符

位移在 PHP 中是数学运算。向任何方向移出去的位都被丢弃。左移时右侧以零填充,符号位被移走意味着正负号不被保留。右移时左侧以符号位填充,意味着正负号被保留。

要用括号确保想要的优先级。例如 $a & $b == true 先进行比较再进行按位与;而 ($a & $b) == true 则先进行按位与再进行比较。

要注意数据类型的转换。如果左右参数都是字符串,则位运算符将对字符的 ASCII 值进行操作。

 PHP 的 ini 设定 error_reporting 使用了按位的值,
提供了关闭某个位的真实例子。要显示除了提示级别
之外的所有错误,php.ini 中是这样用的:
E_ALL & ~E_NOTICE
     

具体运作方式是先取得 E_ALL 的值:
00000000000000000111011111111111
再取得 E_NOTICE 的值:
00000000000000000000000000001000
然后通过 ~ 将其取反:
11111111111111111111111111110111
最后再用按位与 AND(&)得到两个值中都设定了(为 1)的位:
00000000000000000111011111110111
     

另外一个方法是用按位异或 XOR(^)来取得只在
其中一个值中设定了的位:
E_ALL ^ E_NOTICE
     

error_reporting 也可用来演示怎样置位。只显示错误和可恢复
错误的方法是:
E_ERROR | E_RECOVERABLE_ERROR
     
也就是将 E_ERROR
00000000000000000000000000000001
和 E_RECOVERABLE_ERROR
00000000000000000001000000000000
用按位或 OR(|)运算符来取得在任何一个值中被置位的结果:
00000000000000000001000000000001

Example #1 整数的 AND,OR 和 XOR 位运算符

 代码如下 复制代码

<?php
/*
 * Ignore the top section,
 * it is just formatting to make output clearer.
 */

$format = '(%1$2d = %1$04b) = (%2$2d = %2$04b)'
        . ' %3$s (%4$2d = %4$04b)' . "n";

echo <<<EOH
 ---------     ---------  -- ---------
 result        value      op test
 ---------     ---------  -- ---------
EOH;


/*
 * Here are the examples.
 */

$values = array(0, 1, 2, 4, 8);
$test = 1 + 4;

echo "n Bitwise AND n";
foreach ($values as $value) {
    $result = $value & $test;
    printf($format, $result, $value, '&', $test);
}

echo "n Bitwise Inclusive OR n";
foreach ($values as $value) {
    $result = $value | $test;
    printf($format, $result, $value, '|', $test);
}

echo "n Bitwise Exclusive OR (XOR) n";
foreach ($values as $value) {
    $result = $value ^ $test;
    printf($format, $result, $value, '^', $test);
}
?>
以上例程会输出:

 ---------     ---------  -- ---------
 result        value      op test
 ---------     ---------  -- ---------
 Bitwise AND
( 0 = 0000) = ( 0 = 0000) & ( 5 = 0101)
( 1 = 0001) = ( 1 = 0001) & ( 5 = 0101)
( 0 = 0000) = ( 2 = 0010) & ( 5 = 0101)
( 4 = 0100) = ( 4 = 0100) & ( 5 = 0101)
( 0 = 0000) = ( 8 = 1000) & ( 5 = 0101)

 Bitwise Inclusive OR
( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)
( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)
( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) | ( 5 = 0101)

 Bitwise Exclusive OR (XOR)
( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)
( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)
( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)

比较运算符

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换为数值并且比较按照数值来进行。此规则也适用于 switch 语句。当用 === 或 !== 进行比较时则不进行类型转换,因为此时类型和数值都要比对。

 代码如下 复制代码

<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true

switch ("a") {
case 0:
    echo "0";
    break;
case "a": // never reached because "a" is already matched with 0
    echo "a";
    break;
}
?>

 

对于多种类型,比较运算符根据下表比较(按顺序)。

比较多种类型
运算数 1 类型 运算数 2 类型 结果
nullstring string NULL 转换为 "",进行数字或词汇比较
boolnull 任何其它类型 转换为 boolFALSE < TRUE
object object 内置类可以定义自己的比较,不同类不能%
本文章给大家介绍一个实例,用来判断字符串是不是为回文字符串,有需要了解的朋友可参考参考。
 代码如下 复制代码
<?php
  function ishuiwen($str){
   $len=strlen($str);
   $l=1;
   $k=intval($len/2)+1;
     for($j=0;$j<$k;$j++){
       if (substr($str,$j,1)!=substr($str,$len-$j-1,1))
          {
   $l=0;
   break;
     }
   
  
  }
  if ($l==1)
  {
  return 1;
  }
  else
  {
  return -1;
   }
  }
 
  $str=12321;
  echo ishuiwen($str);
?>
在php中false true是真与假的意思,在php中叫做布尔型数据类型,他是我们常见的一种数据类型,如条件判断也是布尔型数据类型,下面我们给大家介绍介绍。

语法

要指定一个布尔值,使用关键字 TRUE 或 FALSE。两个都不区分大小写。

 代码如下 复制代码

<?php
$foo = True; // 赋值 TRUE to $foo
?>

通常你用某些运算符返回 boolean 值,并将其传递给控制流程。

 代码如下 复制代码

// == 真值判断语句
// equality and returns a boolean
if ($action == "show_version") {
    echo "The version is 1.0";
}

// 这样写不是必须的...
if ($show_separators == TRUE) {
    echo "<hr> ";
}

// 直接写,更简单些
if ($show_separators) {
    echo "<hr> ";


布尔类型是PHP中 最简单的类型。它的值可以为 TRUE 或 FALSE。

如:

 代码如下 复制代码

$foo=false;
$foo1=true;
echo "为假时输出值为:".$foo; //没有输出值
echo "<br />为真时输出值为:".$foo1; //输出1

这里主要的细节:

当转换为 boolean 时,以下值被认为是 FALSE :

1、the 布尔值 FALSE 自身
2、the 整型值 0 (零)
3、the 浮点型值 0.0 (零) 空 字符串, 以及 字符串 "0"
4、不包括任何元素的数组
5、不包括任何成员变量的对象(仅PHP 4.0 适用)
6、特殊类型 NULL (包括尚未设定的变量)
7、从没有任何标记(tags)的XML文档生成的SimpleXML 对象

 代码如下 复制代码

//$a=0;
//$a=0.0;
$a="0";
var_dump((bool) 0);
echo "<br />";
var_dump((bool) array());
if($a==false){
echo "空0默认转换为false,成功!";
}else{
echo "不能转换为false";
}

输出:

bool(false)
bool(false) 空0默认转换为false,成功!


转换为布尔值
要明示地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制需要一个 boolean 参数时,该值会被自动转换。

当转换为 boolean 时,以下值被认为是 FALSE:

布尔值 FALSE

整型值 0(零)

浮点型值 0.0(零)

空白字符串和字符串 "0"

没有成员变量的数组

没有单元的对象(仅适用于 PHP 4)

特殊类型 NULL(包括尚未设定的变量)

所有其它值都被认为是 TRUE(包括任何资源)。

条件if else

if 条件语句语法
If 结构是编程语言中最常用的。其语法如下:

if (expr)
  statement
其中,expr 表示条件,statement 表示符合条件后应该执行的语句。意思是,如果符合某个条件 (expr),就执行后面的语句 (statement),如果不符合条件,则什么也不做。

示例如下:

 代码如下 复制代码
<?phpif ($a > $b)  echo "a is bigger than b";?>

上面的示例意思是,如果变量 $a > $b ,则输出 "a is bigger than b",反之,则什么也不做。

符合 if 条件后,如果要执行的语句不止一行,则需要用大括号 {} 将多行语句围起来。示例如下:

 代码如下 复制代码
<?phpif ($a > $b) {  echo "a is bigger than b";  $b = $a;}?>

这个例子的意思是,如果变量 $a > $b ,则输出 "a is bigger than b",并且将 $a 赋值给 $b

在php中我们要删除一个指定的文件我们可以使用unlink函数来实现,下面我给大家详细介绍unlink函数删除一个指定文件的具体方法,有需要了解的朋友可参考参考。

unlink() 函数删除文件。

若成功,则返回 true,失败则返回 false。

 代码如下 复制代码

<?php
unlink("test.txt");
?>

 代码如下 复制代码

<?php
$file = "test.txt";if (!unlink($file))  {
 echo ("Error deleting $file");  }else  { 
echo ("Deleted $file");  }
?>

加上判断

 代码如下 复制代码

<?php
$file = "test.txt";
if(unlink($file))
{
  echo "文件 $file 删除成功!";
}
else
{
  echo "文件 $file 删除失败!";
}
?>
</body>
</html>


输出结果:

文件 test.txt 删除成功!


下面加了判断文件是否存在:

 代码如下 复制代码

<?php

$myfile = “./test1.txt”;
if (file_exists($myfile)) {
$result=unlink ($myfile);
echo $result;
}
?>

rmdir() 函数删除一个目录,成功返回 TRUE,否则返回 FALSE 。

语法:

bool rmdir( string dirname )

例子:

 代码如下 复制代码

<?php
$dirname = 'testdir';
if (rmdir( $dirname )) {
    echo "目录 $dirname 删除成功";
} else {
    echo "目录 $dirname 删除失败";
}
?>

本文章给大家简单的举例说明在php类和对象之公共属性与私有属性用法,有需要了解的朋友可参考。


私有属性

定义了私有属性(private)的属性只能在该类中使用,在该类中可以通过$this->来调用。而在外部引用私有属性将会报错。

实例:

 代码如下 复制代码

<?php
 class People{
  private $name="li ming";
 }
 $p=new People();
 echo $p->name;
?>


注意:设置了私有属性的字段也不能在子类中使用。

公共属性

在php类的操作中,声明字段时使用public、private、protected、final、const、static来描述对象的数据元素的作用域,这类字符称为限定访问控制字符。

有关键字public声明的属性称为公共属性,可以自由地在类的内部、外部读取和修改。这样做显然不够安全,破坏了类封装性的特点。

如果字段没有被声明,则默认为public。

实例:

 代码如下 复制代码

<?php
 class Man{
  public $name="John"; /* 设定公共属性 */
  var $age=20;
 }
 $a=new Man();
 echo $a->name."<br>";
 echo $a->age;
?>

改变属性值

如果属性声明为public,则可以在外部调用时根据需要改变属性的值或者赋予未定义的属性值。

实例:

 代码如下 复制代码

<?php
 class Man{
  public $name="John"; 
  var $age;
 }
 $a=new Man();
 $a->name="Tom"; /* 改变属性值 */
 $a->age=20; /* 赋予属性值 */
 echo $a->name."<br>";
 echo $a->age;
?>

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps怎么使用HSL面板

    ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。 &#8195;...2017-07-06
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • Plesk控制面板新手使用手册总结

    许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • 使用insertAfter()方法在现有元素后添加一个新元素

    复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31
  • 使用percona-toolkit操作MySQL的实用命令小结

    1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24