0

在阅读一本关于 php 的书时,我发现了一段逻辑上对我没有意义的代码。这行代码是类函数的一部分:

private function replaceTags( $pp = false ) {
    //get the tags in the page
    if( $pp == false ) {
        $tags = $this->page->getTags();
    } else {
        $tags = $this->page->getPPTags();
    }
    //go through them all
    foreach( $tags as $tag => $data ) {
        //if the tag is an array, then we need to do more than a simple find and replace!
        if( is_array( $data ) ) {
            if( $data[0] == 'SQL' ) {
                //it is a cached query...replace tags from the database
                $this->replaceDBTags( $tag, $data[1] );
            } elseif( $data[0] == 'DATA' ) {
                //it is some cahched data...replace tags from cached data
                $this->replaceTags( $tag, $data[1] );
            }
        } else {
            //replace the content
            $newContent = str_replace( '{' . $tag . '}', $data, $this->page->setContent( $newContent ) );
            $this->page->setContent( $newContent );
        }
    }
}

对我来说没有意义的具体行是:

$newContent = str_replace( '{' . $tag . '}', $data, $this->page->setContent( $newContent ) );

当变量“$newContent”还没有值时,如何将它传递给“setContent($newContent)”?

有什么解释吗?

4

4 回答 4

0

最后一个参数是回调函数,所以在赋值后调用

于 2013-06-20T02:20:05.753 回答
0

该语句在 for 循环中执行,因此$newContent会将值保存在另一个循环中以供使用。

在第一次执行中,$newContent将为空,但在下一次迭代中,它将有一个要替换的值。

foreach( $tags as $tag => $data ) {
    if ....
    } else {
        //replace the content
        $newContent = str_replace( '{' . $tag . '}', $data, $this->page->setContent( $newContent ) );
     // ^
     // Now next time when the loop executes again it will have a 
     // $newContent to process.

        $this->page->setContent( $newContent );
    }
}
于 2013-06-20T02:14:57.880 回答
0

为什么你认为这个变量“$newContent”没有值?实际上,它是在上面的行中设置的。

无论如何,您可以将一个空变量传递给一个函数。没问题

于 2013-06-20T02:16:16.080 回答
0

如果尚未分配变量,则将其视为包含null. 如果您启用了警告,这将导致记录“未定义变量”警告,但脚本仍将运行。最有可能的是,该setContent()函数检查其参数是否为null,如果是,则仅返回当前内容而不修改它。

但是这段代码对我来说似乎很可疑。setContent()它每次通过循环调用两次。第一行应该只需要使用getContent(),它不应该需要一个参数。

于 2013-06-20T02:51:37.350 回答