在PHP中使用“function $ var(){}”是真的吗?

时间:2012-06-13 21:55:59

标签: php function codeigniter

我正在使用codeigniter并在控制器文件夹中,我创建了一个php文件,如:
注意:自动连接数据库。

<?php

    class Book extends CI_Controller {

        $query = $this->db->get('books');

        foreach ($query->result() as $row) {

            function $row->book_name() {
                echo $row->book_name;
            }

        }

    }

?>

我尝试通过从数据库中提取书名来创建函数,但我不能。通过在函数名中使用$ variable,是否可以创建函数?如果没有,如何快速创建它?感谢...

3 个答案:

答案 0 :(得分:4)

绝对

$myfunction = function($a,$b,$c) {return $a+$b+$c;};

这是一个匿名函数的示例。它没有名称,但可以通过$myfunction(1,2,3)访问。

我不完全确定你在你的例子中想要做什么......仅仅echo $row->book_name是否足够?或者您是否尝试定义与书名相同的功能?在后一种情况下,您可以使用变量变量:${$row->book_name} = function... - 但它可能不是一个好主意。

答案 1 :(得分:4)

我想你可能对__call()感兴趣。

如果对不存在的类中的方法进行调用,则会调用__call()方法,您可以从那里处理该调用。

在阅读结果时将图书存储在数组中,并向您的班级添加__call方法。访问该方法时,您可以根据所调用函数的名称在数组中搜索该书,并采取适当的行动。

class Book extends CI_Controller {
    protected $_books = array();

    public function __construct() {
        $query = $this->db->get('books');

        foreach ($query->result() as $row) {
            $this->_books[] = $row->book_name;
        }
    }

    public function __call($name, $arguments) {
        if (in_array($name, $this->_books)) {
            echo $name;
        } else {
            ehco 'I do not have this book!';
        }
    }
}

请记住PHP的命名方法规则,有效的函数名称以字母或下划线开头,后跟任意数量的字母,数字或下划线。不允许使用空格,因此请记住这一点。

答案 2 :(得分:0)

您正在搜索create_function()吗?

但是说真的,我花了一分钟去谷歌...