php assert 问题

cooc123 发布于 2018/06/15 19:37
阅读 469
收藏 0
PHP
<?php

function fo() {
    file_put_contents('a.php', time());
    return FALSE;
}

assert("fo()");

目录下并没有生成 a.php

加载中
0
tcxu
tcxu

要保证通过调用 assert("fo()") 函数,来执行 fo(), 那麽,途径有2:

1。 函数 fo() 必须返回 true。

function fo() {
    file_put_contents('a.php', time());
    return true;
}

assert("fo()");

2。如果不改动 fo() 的返回值,那 assert("fo()") 函数的参数必须返回 true。 既然 f()返回 false, 那么,在此参数的前面添加一个操作符 ! (求反):

 function fo() {
    file_put_contents('a.php', time());
    return FALSE;
}

assert("!fo()");

看来,php 的 断言函数 assert() , 在这里的作用是: 只保证 调用它的参数函数返回 TRUE,如果返回 FALSE,就不调用。

若要无论参数函数 fo() 返回 true 还是 false,都要调用一次参数函数, 那么在 assert("fo()"); 之前,添加一行代码:

assert_options(ASSERT_CALLBACK, 1);

 function fo() {
    file_put_contents('a.php', time());
    return FALSE;
}
assert_options(ASSERT_CALLBACK, 1);
assert("fo()");

这样设置,如果 f() 返回 FALSE, 则有警告信息出现,但 fo() 还是调用了,结果 楼主的目的就会达到,即文档 a.php 无论如何都将创建。

tcxu
tcxu
回复 @cooc123 : 我测试的结果,与你不同。return true.false 都回生成新的 a.php.
cooc123
cooc123
回复 @tcxu : return true/false 都没有生成a.php文件 目录是可写,单独调用fo()是ok的
tcxu
tcxu
回复 @Keygen : 谢谢你的指正。我检查并改正了写错的代码。
Keygen
Keygen
这位同学。return 写错了
0
cooc123
cooc123

奇怪的是 我用cli 运行这个php 文件 可以生成a.php 

用浏览器就不能

返回顶部
顶部