0

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

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

谢谢。

4

6 回答 6

3
public function get_news($slug = FALSE) {

这就是说,如果在没有传递变量的情况下调用函数,则将其false用作$slug

于 2013-06-27T13:17:43.600 回答
2

PHP 调用这些默认参数,它们是一种为调用时未传递给函数的变量提供值的方法。所以给定你的函数(为了演示的目的,我把它变成了一个函数而不是一个方法):

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'在示例中)。

这在指定不经常需要的参数时特别有用。但请仔细阅读文档,因为只能将某些值指定为默认值。它们是:标量(布尔值、字符串、整数和浮点数)、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) {}

键盘演示

那些不起作用的:

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"

键盘演示

于 2013-06-27T13:28:48.207 回答
1

它为它提供了一个默认值,因此您在调用该函数时不必给它一个默认值。它允许你做get_news()而不是总是做get_news(FALSE),并且只在你想要默认值以外的东西时才给出参数,即:get_news(TRUE)

ETA:在这种情况下,参数可能是 FALSE 表示没有 slug,字符串就是 slug。所以它会get_news('category')

于 2013-06-27T13:17:36.320 回答
0

“有人能告诉我 ($slug = FALSE) 在定义方法时做了什么吗?”

$slug = false意味着它是一个可选参数,false如果未提供,它将默认为。

然后删除= falsewill 会导致需要该参数。因此你的错误。

于 2013-06-27T13:18:23.550 回答
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,因为没有指定参数,所以函数会将预期的变量视为 false。

但:

if ($Class->Return_Test("Input") !== false){
  echo "Returned False"; 
}else{
  echo "Hasn't returned false"; 
}

因为将字符串传递给函数,所以预期变量被视为字符串,而不是默认值。所以输出将是:

没有返回 false

于 2013-06-27T13:21:53.897 回答
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) 没有设置

$蛞蝓=假

你会得到错误

<?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。

于 2018-04-26T12:57:40.193 回答