分配尚未定义的数组索引

时间:2011-03-01 18:46:52

标签: php

$mailSent = mail($to, $subject, $message, $headers);
if (!$mailSent) {
   $errors['mailfail'] = true;
}

我对这一行感到困惑:

$errors['mailfail'] = true;

$errors是一个空数组,所以基本上索引mailfail不存在。正确?

7 个答案:

答案 0 :(得分:3)

//use "Mail (Function)" and assign the result to a "Variable"
$mailSent = mail($to, $subject, $message, $headers);

//use "Control Structures" to check the state of the "Variable": true / false
if (!$mailSent)
{
   //Assign the index 'mailfail' of an "Array" to a "boolean" of true
   $errors['mailfail'] = true;
}

答案 1 :(得分:2)

尝试发送电子邮件,然后检查电子邮件的发送是否成功,如果发送失败,则将变量$ errors ['mailfail']设置为true。

我认为可能让您感到困惑的一件事是它在if语句中的$ mailSent之前有一个感叹号。这个感叹号只是意味着“不”。所以它是“如果(不是$ mailSent),将$ errors ['mailfail']设置为true。” - 它取决于所讨论的功能(在这种情况下是mail(...)函数)结果的真正含义。该函数失败时返回“false”(根据文档),所以问题:“不是$ mailSent?”如果$ mailSent为false,则返回true,表示{...}中的内容被执行。如果你拿出感叹号,只有当mail()函数返回true时才会执行{...}内的东西(在这种情况下意味着“成功”)。

请注意,它不会检查是否收到了邮件,只检查是否已发送邮件。

答案 2 :(得分:2)

$ mailSent是一个变量

邮件($ to,$ subject,$ message,$ headers); 邮件是一个功能名称。此功能将发送邮件。 该函数有4个参数,to,subject,message和headers。

如果函数无法发送邮件,则会将变量的值设置为false。如果成功,它会将veriable的值设置为true

下一行说 if(!$ mailSent){$ errors ['mailfail'] = true; }

如果变量不为真。 Actualy这意味着“如果变量包含”false“ 的!标志意味着不

{$ errors ['mailfail'] = true;只有当变量包含false时才会执行此行(意味着名为“mail”的函数不是成功的

$ errors ['mailfail'] = true; $ errors是变量的集合。 $ errors中名为'mailfail'的变量在此行设置为true。

答案 3 :(得分:0)

它基本上说明:“如果邮件发送失败 - 显示错误发生”

传递邮件/消息信息(To,Subject,Message,Headers)并将该函数的结果存储到$mailSent

如果$mailSent有一个表示成功的值 - 则不会发生任何其他事情(因为它已正确发送)。但如果有一个表示失败的值(!$mailSent〜不成功),那么它会将“邮件失败”的错误设置为true

答案 4 :(得分:0)

您尝试向主题为$to的{​​{1}},邮件$subject和标题$message发送电子邮件,如果发生错误,则将其放入$headers

http://php.net/manual/en/function.mail.php

http://php.net/manual/en/control-structures.if.php

答案 5 :(得分:0)

根据文档(link),PHP函数mail返回一个表示成功或失败的布尔值。据推测,有一个名为$errors的数组。如果电子邮件失败,则数组索引mailfail将设置为true。

答案 6 :(得分:0)

任何包含值的东西都不需要在赋值之前声明,无论它是纯变量,数组索引还是对象属性;赋值将根据需要创建它们。这意味着执行后

$errors['mailfail'] = true;

数组$errors将包含一个带有'mailfail'和值true的条目,即使在该行之前未定义$errors['mailfail'](或$errors)执行。

与从未定义的变量或索引读取不同,分配给一个不会生成警告。在数值方面,也可以自动创建数组。对象也将自动创建,但会在严格模式下生成警告。

<?php
# note that of PHP 5.4, E_ALL includes E_STRICT
error_reporting(E_ALL | E_STRICT);
# creates a variable named $foo:
$foo = 'bar';
# arrays don't need to be created explicitly; the following creates
# $array and $array['foo'] as necessary
$array['foo'] = 'bar';
# objects should be created explicitly,
$obj = new StdClass;
# but object properties don't
$obj->foo = 'bar';

您甚至可以在不存在的数组中指定嵌套索引,并根据需要创建插入数组。

unset($array);
$array['foo'][42]['bar'][]['baz'][]['bam']='bug-AWWK!';

与数组不同,介入对象会在严格模式下生成警告(在开发时应始终使用),当自动创建时,最好明确创建它们。

$obj = new StdClass;
# The following will generate a "Creating default object from empty value"
# warning in strict mode,
//$obj->foo->bar[5]->baz->bam = 'bug-AWWK!';
# so you need to explicitly instantiate each intervening object,
$obj->foo = new StdClass;
# but don't need to assign arrays
# $obj->foo->bar = array();
$obj->foo->bar[5] = new StdClass;
$obj->foo->bar[5]->baz = new StdClass;
$obj->foo->bar[5]->baz->bam = 'bug-AWWK!';