PHP - 函数名称($ variable = FALSE) - FALSE声明的目的 - 来自Codeigniter的示例

时间:2013-06-27 13:16:01

标签: php codeigniter function

这可能是一个简单的问题,但这是我直到最近才遇到过的事情。

我开始研究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教程中的示例来解释我的困惑。

感谢。

6 个答案:

答案 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');

Codepad Demo

$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) {}

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

答案 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。