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


PHP - function name($variable = FALSE) - purpose of FALSE declaration - example from Codeigniter

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

我刚开始研究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.php1时为$slug提供了一个值,那么在函数中,$slug将是这个值(示例中为'abc')。

当指定不经常需要的参数时,这可能特别有用。但是要小心阅读文档,因为只有特定的值可以指定为默认值。它们是:标量(布尔值、字符串、整数和浮点)、arrays和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。