这可能是一个简单的问题,但这是我直到最近才遇到过的事情。
我开始研究PHP框架并深入研究Codeigniter的教程。
在构建动态新闻栏目页面时,定义了以下方法:
public function get_news($slug = FALSE) {
news_model.php
中的。然后,该方法继续检查($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教程中的示例来解释我的困惑。
感谢。
答案 0 :(得分:3)
public function get_news($slug = FALSE) {
这说明如果在不传递变量的情况下调用函数,则使用false
作为$slug
的值
答案 1 :(得分:2)
PHP调用这些default arguments,它们是为在调用函数时未传递给函数的变量提供值的一种方法。所以考虑到你的功能(我把它作为一个函数而不是用于演示的方法):
function get_news($slug = FALSE) {
var_dump($slug);
}
echo "With no arguments: ";
get_news();
echo "With a slug (abc): ";
get_news('abc');
当$slug
没有传递给get_news()
的值时,它会假定函数签名中的默认值false
。但是,如果在调用$slug
时为get_news()
提供了值,那么在函数中,$slug
将为此值(示例中为'abc'
)。
在指定通常不需要的参数时,这可能特别有用。请仔细阅读文档,因为只能将某些值指定为默认值。它们是:标量(布尔值,字符串,整数和浮点数),array
和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) {}
不会工作的人
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"
答案 2 :(得分:1)
它为它提供了一个默认值,因此您在调用该函数时不必提供一个值。它允许您执行get_news()
而不是始终执行get_news(FALSE)
,并且只在您需要除默认值之外的其他内容时才提供参数,即:get_news(TRUE)
ETA:在这种情况下,参数可能是FALSE意味着没有slug,而字符串是slug。所以它会是get_news('category')
。
答案 3 :(得分:0)
“有人能告诉我在定义方法时会发生什么($ slug = FALSE)吗?”
$slug = false
表示它是一个可选参数,如果没有提供,将默认为false
。
删除= false
将导致需要该参数。因此你的错误。
答案 4 :(得分:0)
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,因为没有指定param,因此该函数会将预期变量视为false。
但是:
if ($Class->Return_Test("Input") !== false){
echo "Returned False";
}else{
echo "Hasn't returned false";
}
因为将一个String传递给函数,所以将期望的变量视为字符串,而不是默认值。所以输出将是:
未返回false
答案 5 :(得分:0)
<?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)no set
$ slug = 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 = FALSE) {
var_dump($slug);
}
?>
如果定义$ slug = FALSE,它将返回false automatic。