首页 开发编程 正文

php if 怎么写

和||在Java和PHP以及c#中都是逻辑操作符,引言我们经常在程序流程中进行逻辑判断;学习时间正好比PHP内的&,=null&。如果$class本身就是null;才会执行接下来的属性检查条件;...

php if 怎么写,c语言中和怎么表达?

“&&”表示 与,意为同时都要满足。“||”表示 或,意为二者或多着只要满足其中一个。在C语言中,&&和||都属于逻辑运算符,并且都是双目运算符。

逻辑运算符总共有3个,分别是"&&"、"||"和"!"。a && b,一假必假,结合性从左至右。||是逻辑或运算符,a || b,一真必真,结合性从左至右。

&&和||在Java和PHP以及c#中都是逻辑操作符,也叫条件操作符。

是一个符号写两遍这么简单吗?

引言

我们经常在程序流程中进行逻辑判断,与或非,用的是炉火纯青,相信你也不少用。那么在PHP中,有两个操作符非常接近,就是 | 和 ||,那么他们有什么区别呢?

本文就从几个小栗子,说一说逻辑运算符,和位运算符那些恩爱纠缠。

学习时间

正好比PHP内的 & 和 && 的关系一样,双符号表示“短路”操作。什么意思呢,就好比下面这个条件判断:

if(condition1 || condition2 || condition3)

如果 condition1 = true,那么后面的两个condition根本不会进行检查。效率是不是顿时高了起来?

假如写成 | ,像下面这样的判断逻辑

if(condition1 | condition2 | condition3)

这个判断会把 condition1,2,3 挨个执行一遍,不管 condition1到底是不是true。是不是有点浪费资源了!

所以说,不使用“短路”操作符,程序上下文是有一定风险的。比如下面的例子,检查某个对象是否为空,且检查其某个属性值满足某个条件:

if($class != null && $class->someVar < 20)

上面的写法,如果 $class 本身就是 null,那么直接熔断;只有 $class 不为空,才会执行接下来的属性检查条件。

如果是一个 & 号,会出现什么情况呢?

如果 $class = null,直接抛出 NullReferenceException 异常;如果 $class != null,第一个条件通过,如果属性 someVar 不存在,则抛出method不存在异常;

所以说,没有短路机制,这个判断条件跑偏了。

深入学习

其实对于 | 或 &,在PHP中是作为位操作符使用。下图是PHP位操作符的意义:

位操作应用于二进制数据操作,比如:

A = 01010101 B = 10101010 A | B = 11111111

当然也可以是任何类型的数据,因为底层还是字节码的按位操作。

写在最后

本文通过操作符 | 和 || 的区别与使用,使大家能够明白,位操作符与逻辑运算符的本质区别。以及逻辑运算符所具有的“短路”机制。

位操作在数据运算中很高效,但是不直观。使用的时候要充分测试。

Happy coding :-)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

phpcms搜索结果如何显示自定义的字段?

在你设置自定义字段的时候,如果细心会发现有两项叫做"作为搜索条件"和“作为全站搜索信息”,将它们选为“是”。

php计算1到8的阶乘1?

php计算1到8的阶乘1!+2!+3!+·····+8

每个语言必备阶乘,代码如下

$sum = 0;

for ($i = 1; $i < 9; $i++) {

$sum += jc($i);

}

echo $sum

function jc($num){

$tmp = 1;

$tmp2 = $tmp;

for ($i=1; $i < $num; $i++) {

if( $tmp < $num){

$tmp2 *= ($tmp+1);

++$tmp;

}

}

return $tmp2;

}

PHP有什么特点?

tep 1 =>

php的扩展模块都放在 ext/ 目录下,比如说 snmp模块、mysql模块。 我们要建立自己的模块,就要在ext目录下为自己的模块建一个目录。比如,我们要做一个分析config文件的模块,命名为pconfig模块(parse config的简写),需在ext下建立目录pconfig。将我写好的7个文件copy到该目录下,另外需对主目录下的configure和internal_functions.c作一些修改。

Step 2 =>

Makefile.am Makefile.in

是模板文件,用户执行configure时,会调用这两个文件,生成编译时所用的Makefile文件。修改时将小写的pconfig换成你自己的模块名,别忘了把大写的PCONFIG也替换掉(不要告诉我你不会vi的替换语句)。config.m4也是执行configure将会调用的检测脚本程序,以后我们来讨论这些脚本程序的更深入的修改。现在你只需要把pconfig该成你的模块就可以了。对config.h.stub和setup.stub也如法炮制。其实setup.stub也没什么用。

Step 3 =>

php3-pconfig.h 头文件中

extern php3_module_entry pconfig_module_entry;

#define pconfig_module_ptr &pconfig_module_entry

#define phpext_pconfig_ptr pconfig_module_ptr

这几行定义了模块的入口,将入口注册到php后,php会通过模块入口找到你写的函数

下面几个函数定义是用宏进行定义的,展开以后其实就是 php3_minit_pconfig , php3_rinit_pconfig ……分别在你的模块初试化或结束时被调用,如果你的模块很简单,也就不需要这些定义了

extern PHP_MINIT_FUNCTION(pconfig);

extern PHP_RINIT_FUNCTION(pconfig);

extern PHP_MSHUTDOWN_FUNCTION(pconfig);

PHP_MINFO_FUNCTION(pconfig);

这是你的函数声明,将来写在php脚本语句中的函数名就是在PHP_FUNCTION中定义的名字。

PHP_FUNCTION(pconfig_test);

如果有多个,还可以继续往下加

PHP_FUNCTION(pconfig_parsefile);

PHP_FUNCTION(pconfig_release); …….

Step 4 =>

接下来我们看最重点的C代码了

function_entry pconfig_functions[] = {

PHP_FE(pconfig_test, NULL)

{NULL, NULL, NULL}

};

定义的是你的函数的入口(前面我们提到过模块的入口),按照格式将你在头文件中定义的函数写进去吧。注意,这是用宏定义的,不要管语法是否正确。以后我们具体讨论这些宏的用法。

php3_module_entry pconfig_module_entry = {

"pconfig", pconfig_functions, PHP_MINIT(pconfig), PHP_MSHUTDOWN(pconfig), PHP_RINIT(pconfig), NULL, PHP_MINFO(pconfig), STANDARD_MODULE_PROPERTIES

};

注册模块的入口信息,比如模块名,函数接口,初试化模块将调用的函数等等,如果你的模块不执行复杂操作的话,可以忽略掉他们,写成

php3_module_entry pconfig_module_entry = {

"pconfig", pconfig_functions, NULL,NULL,NULL,NULL,NULL,STANDARD_MODULE_PROPERTIES

};

Step 5 =>

写你自己的函数

在头文件和function_entry处,我们已经定义了自己的函数pconfig_test,现在我们就来实现pconfig_test的功能。就比如执行两个数相加的和吧。

static void _php3_pconfig_test(INTERNAL_FUNCTION_PARAMETERS)

{ ......

}

PHP_FUNCTION(pconfig_test)

{

_php3_pconfig_test(INTERNAL_FUNCTION_PARAM_PASSTHRU);

}

当系统调用pconfig_test时,会调用你的_php3_pconfig_test函数,当然你也可以把_php3_pconfig_test里的内容直接写在PHP_FUNCTION(pconfig_test)中,这样做只是程序结构比较清晰。注意:不要将_php3_pconfig_test命名成php3_pconfig_test,PHP_FUNCTION(pconfig_test)宏展开后实际上就是php3_pconfig_test!

Step 6 =>

好了,现在我们开始修改configure,在echo $ac_n "checking for MySQL support""... $ac_c" 1>&6的前面(当然,如果你熟悉configure的话,可以加在任何合适的地方)加上下面几句话

if test "${with_pconfig+set}" = set; then

withval="$with_pconfig"

# Add your lib in here

EXTRA_LIBS="$EXTRA_LIBS"

# Add your include path in here

INCLUDES="$INCLUDES"

EXT_SUBDIRS="$EXT_SUBDIRS pconfig"

EXT_LIBS="$EXT_LIBS pconfig/libphpext_pconfig.a"

EXTINFO_DEPS="$EXTINFO_DEPS ../ext/pconfig/extinfo.c.stub"

EXT_STATIC="$EXT_STATIC pconfig"

fi

修改internal_functions.c,在头文件定义中加入#include "ext/pconfig/php3_pconfig.h"

在zend_module_entry数组中加入phpext_pconfig_ptr,

Step 7 =>

从新configure,带上需要的参数,不要忘记的是在参数里加入 --with-pconfig

Step 8 =>

index.php3

<? echo pconfig_test(123,678)."

"; ?>

执行%>php index.php3

本文转载自互联网,如有侵权,联系删除