我正在使用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,是否可以创建函数?如果没有,如何快速创建它?感谢...
答案 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()吗?
但是说真的,我花了一分钟去谷歌...