php如何在初始化的参数上起作用?

时间:2019-03-04 14:51:09

标签: php

假设我具有以下功能:

function myTest($param = false){
echo $param;
}

现在我对函数进行了以下调用

myTest($test);

但是,在进行调用时尚未声明$ test。 php会抛出错误吗?

我问,因为我有一个过程,有可能在调用它们之前未实例化某些变量。从理论上讲,这是可以的,因为我在处理这种情况的这些函数中都有默认行为(这就是为什么我初始化函数参数)。但是,如果php在这种情况下引发错误,则我必须构建一种变通方法(这将很丑陋^^),但是在这样做之前,我想请问:D

1 个答案:

答案 0 :(得分:2)

您不会收到错误,但会得到警告。参见variable basics

  

不必在PHP中初始化变量,但这是一个很好的做法。 未初始化变量的类型默认值取决于使用它们的上下文-布尔值默认为FALSE,整数和浮点默认为零,字符串(例如在echo中使用)设置为空字符串和数组变成一个空数组。

示例:未初始化变量的默认值

<?php
// Unset AND unreferenced (no use context) variable; outputs NULL
var_dump($unset_var);

// Boolean usage; outputs 'false' (See ternary operators for more on this syntax)
echo($unset_bool ? "true\n" : "false\n");

// String usage; outputs 'string(3) "abc"'
$unset_str .= 'abc';
var_dump($unset_str);

// Integer usage; outputs 'int(25)'
$unset_int += 25; // 0 + 25 => 25
var_dump($unset_int);

// Float/double usage; outputs 'float(1.25)'
$unset_float += 1.25;
var_dump($unset_float);

// Array usage; outputs array(1) {  [3]=>  string(3) "def" }
$unset_arr[3] = "def"; // array() + array(3 => "def") => array(3 => "def")
var_dump($unset_arr);

// Object usage; creates new stdClass object (see http://www.php.net/manual/en/reserved.classes.php)
// Outputs: object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }
$unset_obj->foo = 'bar';
var_dump($unset_obj);
?>