本篇文章给人人带来的内容是关于php中assert和eval的细致引见(代码示例),有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。
assert 推断一个表达式是不是建立。返回true or false;
<?php $s = 123; assert("is_int($s)"); ?>
从这个例子能够看到字符串参数会被实行,这跟eval()相似。
不过eval($code_str)只是实行相符php编码范例的$code_str。
eval():该函数关于在数据库文本字段中供往后盘算而举行的代码存储很有效。(在生产中也发起罕用)
注重:1.eval()里必需是字符串;
2.eval()里的引号必需是双引号,由于单引号不能剖析字符串里的变量$str;
eval定义和用法:
(1)eval() 函数把字符串根据 PHP 代码来盘算(盘算=实行)。
(2)该字符串必需是正当的 PHP 代码,且必需以分号末端。
(3)假如没有在代码字符串中挪用 return 语句,则返回 NULL。假如代码中存在剖析毛病,则 eval() 函数返回 false
assert的用法却更细致一点。
assert_option()能够用来对assert()举行一些束缚和掌握;
默认值
ASSERT_ACTIVE=1 //Assert函数的开关
ASSERT_WARNING =1 //当表达式为false时,是不是要输出警告性的毛病提醒,issue a PHP warning for each failed assertion
ASSERT_BAIL= 0 //是不是要中断运转;terminate execution on failed assertions
ASSERT_QUIET_EVAL= 0 //是不是封闭毛病提醒,在实行表达式时;disable error_reporting during assertion expression evaluation
ASSERT_CALLBACK= (NULL) // 是不是启动回调函数 user function to call on failed assertions
php的官方文档里头是发起将assert用来举行debug,我们能够发明另有一个开关ASSERT_ACTIVE能够用来掌握是不是开启debug。
如今题目就产生了,假如顺序员在开辟的时刻在代码中留下了许多assert(),然后在顺序宣布的时刻封闭实行,设置assert_options(ASSERT_ACTIVE,0);如许做是不是可行?有无安全题目?
既然assert重要作用是debug,就不要在顺序宣布的时刻还留着它。在顺序顶用assert来对表达举行推断是不明智的,缘由上文说了, 一个是在生产环境中assert能够被disabled,所以assert不能被完整信托;二是assert()能够被继承实行;而假如在生产环境让 ASSERT_ACTIVE=1,那这个表达式字符串能够被实行自身就存在安全隐患。assert引发的代码打针
比方
<?php function fo(){ $fp = fopen("c:/test.php",'w'); fwrite($fp,"123"); fclose($fp); return true; } assert("fo()"); ?>
注重:assert把全部字符串参数当php代码实行,eval把正当的php代码实行。
以上就是php中assert和eval的细致引见(代码示例)的细致内容,更多请关注ki4网别的相干文章!