这可能是一个很简单的问题,但这是我最近才遇到的问题。
我刚开始研究PHP框架,并深入研究了Codeigniter教程。
在构建动态新闻部分页面时,定义了以下方法:
public function get_news($slug = FALSE) {
在CCD_ 1中。然后,该方法继续检查($slug === FALSE)
是否返回所有数据库行,如果不返回,则获取与传递的$slug
相对应的新项。
有人能告诉我($slug = FALSE)
在定义方法时做什么吗?排除它将返回一个缺少参数的警告。
完整的方法是:
public function get_news($slug) {
if ($slug === FALSE) {
$query = $this->db->get('news');
return $query->result_array();
}
$query = $this->db->get_where('news', array('slug' => $slug));
return $query->row_array();
}
我意识到这并不是Codeigniter特有的,但我想我应该用CI教程中的例子来解释我的困惑。
谢谢。
public function get_news($slug = FALSE) {
这意味着,如果在不传递变量的情况下调用函数,则使用false
作为$slug
的值
PHP调用这些默认参数,它们是为变量提供值的一种方式,当函数被调用时,该值不会传递给函数。因此,给定您的函数(为了演示的目的,我将其作为函数而不是方法):
function get_news($slug = FALSE) {
var_dump($slug);
}
echo "With no arguments: ";
get_news();
echo "With a slug (abc): ";
get_news('abc');
(Codepad Demo)
当没有$slug
的值传递到get_news()
时,它将采用函数签名中的默认值false
。然而,如果在调用news_model.php
1时为$slug
提供了一个值,那么在函数中,$slug
将是这个值(示例中为'abc'
)。
当指定不经常需要的参数时,这可能特别有用。但是要小心阅读文档,因为只有特定的值可以指定为默认值。它们是:标量(布尔值、字符串、整数和浮点)、array
s和NULL。不能将参数默认定义为非标量,例如对象、对象方法、对象属性、函数调用或常量(基本上是任何非标量或表达式)。
有效的:
function test($a = false) {}
function test($a = 'default') {}
function test($a = 1) {}
function test($a = array()) {}
function test($a = SOME_CONST) {}
function test($a = SomeClass::someConstant) {}
(Codepad Demo)
不会工作的:
function test($a = someFunc()) {}
function test($a = new stdClass()) {}
function test($a = SomeClass::staticMethod()) {}
function test($a = 1 + 1) {} // this includes all expressions (and string concatenation)
对于那些没有的变量,一个常见的范例是将参数默认为NULL
,然后如果变量的值为NULL
,则在函数中为其指定一个默认值。示例:
function getDefault() {
return 'some dynamic default';
}
function test($a = NULL) {
if($a === NULL) {
$a = getDefault();
}
var_dump($a);
}
test(); // string(20) "some dynamic default"
test('a'); // string(1) "a"
(Codepad Demo)
它为它提供了一个默认值,因此在调用函数时不必提供一个值。它允许您执行get_news()
,而不是总是执行get_news(FALSE)
,并且只在您想要默认值以外的值时给出参数,即:get_news(TRUE)
ETA:在这种情况下,参数可能是FALSE,表示没有段塞,字符串是段塞。所以它将是get_news('category')
。
"有人能告诉我($slug=FALSE)在定义方法时会做什么吗?"
$slug = false
意味着它是一个可选参数,如果不提供,它将默认为false
。
删除= false
将导致需要该参数。这就是你的错误。
public function FUnction_Name ($Var = false){ }
这是在定义一个未在函数调用中指定的默认值。。。示例:
class Test {
public function Return_Test ($Variable = false){
if ($Variable === false){
return false;
}
return true;
}
}
然后呼叫:
$Class = new Test();
if ($Class->Return_Test() === false){
echo "Returned False";
}else{
echo "Hasn't Returned false";
}
这将输出返回false,因为没有指定任何参数,因此函数将把期望的变量视为false。
但是:
if ($Class->Return_Test("Input") !== false){
echo "Returned False";
}else{
echo "Hasn't returned false";
}
因为字符串被传递到函数中,所以期望的变量被视为字符串,而不是默认变量。因此输出将是:
尚未返回错误
<?php
echo "With no arguments: ";
get_news();
echo "With a slug (abc): ";
get_news('abc');
echo "No arguments No define: ";
get_news_no_false();
function get_news($slug = FALSE) {
var_dump($slug);
}
function get_news_no_false($slug) {
var_dump($slug);
}
?>
如果未定义函数get_news_no_false($slug),则不设置
$slug=错误
你会得到错误
<?php
echo "With no arguments: ";
get_news();
echo "With a slug (abc): ";
get_news('abc');
echo "No arguments No define: ";
get_news_no_false();
function get_news($slug = FALSE) {
var_dump($slug);
}
function get_news_no_false($slug = FALSE) {
var_dump($slug);
}
?>
如果您定义$slug=FALSE,它将自动返回FALSE。