如何在php中为数组定义默认值以避免未定义的偏移量?

如何在php中为数组定义默认值以避免未定义的偏移量?,php,Php,我正在使用isset检查此代码是否为空: if(!isset($this->objCodes[0]->SignupCode))$this->objCodes[0]->"NULL"; 但它不起作用。帮助?您可能希望使用empty来检查该值是否具有可能无用的值。如果您的注册码永远不会是空字符串(”)、0或,请尝试以下操作: if(empty($this->objCodes[0]->SignupCode)) { $this->objCodex

我正在使用isset检查此代码是否为空:

    if(!isset($this->objCodes[0]->SignupCode))$this->objCodes[0]->"NULL";

但它不起作用。帮助?

您可能希望使用empty来检查该值是否具有可能无用的值。如果您的注册码永远不会是空字符串(
)、0或,请尝试以下操作:

if(empty($this->objCodes[0]->SignupCode))
{
    $this->objCodex[0] = null;
}
if(!isset($this->objCodes[0]->SignupCode))
{
    $this->objCodex[0] = null;
}
我通常使用
empty()
的原因是,如果我从数据库导入,我要查找的数据将始终返回true到
isset()
,因为它是由数据库设置的。我更感兴趣的是它是null还是空字符串,因为这意味着变量中实际上没有任何有价值的东西

如果像这样将值加载到对象中:

$result = mysql_query("Some Query");
while($temp = mysql_fetch_assoc($result)
{
    $myObj = new stdClass;
    $myObj->SignupCode = $temp['SignupCode'];
    $myObjs[] = $myObj;
}
if(isset($myObjs[0]->SignupCode))
if(!isset($this->objCodes[0])) {
  $this->objCodes[0] = new ObjectCode();
}
当进行如下测试时,您将始终收到
true
isset()
函数:

$result = mysql_query("Some Query");
while($temp = mysql_fetch_assoc($result)
{
    $myObj = new stdClass;
    $myObj->SignupCode = $temp['SignupCode'];
    $myObjs[] = $myObj;
}
if(isset($myObjs[0]->SignupCode))
if(!isset($this->objCodes[0])) {
  $this->objCodes[0] = new ObjectCode();
}
因为从技术上讲,该值总是“设置”的

如果您确实想查看它是否完全没有设置,请尝试以下操作:

if(empty($this->objCodes[0]->SignupCode))
{
    $this->objCodex[0] = null;
}
if(!isset($this->objCodes[0]->SignupCode))
{
    $this->objCodex[0] = null;
}

您可能希望使用empty来检查该值是否具有可能无用的值。如果您的注册码永远不会是空字符串(
)、0或,请尝试以下操作:

if(empty($this->objCodes[0]->SignupCode))
{
    $this->objCodex[0] = null;
}
if(!isset($this->objCodes[0]->SignupCode))
{
    $this->objCodex[0] = null;
}
我通常使用
empty()
的原因是,如果我从数据库导入,我要查找的数据将始终返回true到
isset()
,因为它是由数据库设置的。我更感兴趣的是它是null还是空字符串,因为这意味着变量中实际上没有任何有价值的东西

如果像这样将值加载到对象中:

$result = mysql_query("Some Query");
while($temp = mysql_fetch_assoc($result)
{
    $myObj = new stdClass;
    $myObj->SignupCode = $temp['SignupCode'];
    $myObjs[] = $myObj;
}
if(isset($myObjs[0]->SignupCode))
if(!isset($this->objCodes[0])) {
  $this->objCodes[0] = new ObjectCode();
}
当进行如下测试时,您将始终收到
true
isset()
函数:

$result = mysql_query("Some Query");
while($temp = mysql_fetch_assoc($result)
{
    $myObj = new stdClass;
    $myObj->SignupCode = $temp['SignupCode'];
    $myObjs[] = $myObj;
}
if(isset($myObjs[0]->SignupCode))
if(!isset($this->objCodes[0])) {
  $this->objCodes[0] = new ObjectCode();
}
因为从技术上讲,该值总是“设置”的

如果您确实想查看它是否完全没有设置,请尝试以下操作:

if(empty($this->objCodes[0]->SignupCode))
{
    $this->objCodex[0] = null;
}
if(!isset($this->objCodes[0]->SignupCode))
{
    $this->objCodex[0] = null;
}

那么,
$this->objcode
定义了吗?如果是,它是数组吗?它还可以作为字符串使用,因为您可以将sring处理为单个字符的数组。此外,您的声明实际上是在检查对象上是否设置了
SignupCode
。。。如果设置了
$this->objCodes[0]
,则不会这样做。

是否定义了
$this->objCodes
?如果是,它是数组吗?它还可以作为字符串使用,因为您可以将sring处理为单个字符的数组。此外,您的声明实际上是在检查对象上是否设置了
SignupCode
。。。如果设置了
$this->objCodes[0]
,则不会发生此错误。

我相信您收到的错误来自无效的属性访问器
->“NULL”

isset函数应用于检查数组索引是否存在,例如在objCodes上检查的[0]索引:

if(isset($this->objCodes[0])) {
如果不知道对象代码数组(属性为
SignupCode
)中当前的对象类型,我无法具体回答设置默认值的问题,但是如果我使用类
ObjectCode
作为示例,您可以在数组元素上设置默认值,如下所示:

$result = mysql_query("Some Query");
while($temp = mysql_fetch_assoc($result)
{
    $myObj = new stdClass;
    $myObj->SignupCode = $temp['SignupCode'];
    $myObjs[] = $myObj;
}
if(isset($myObjs[0]->SignupCode))
if(!isset($this->objCodes[0])) {
  $this->objCodes[0] = new ObjectCode();
}
如果我知道更多关于您试图通过代码块实现的内容,我可能会更具描述性

更新:如果确实希望确保集合始终返回值,则可以创建实现的容器,然后实现在未找到请求的索引时返回默认值:

public class ObjectCodeContainer implements ArrayAccess {
  private $collection;

  public function __construct() {
    $this->collection = array();
  }

  public function offsetGet($offset) {
    if(!isset($this->collection[$offset])) {
      $this->collection[$offset] = new ObjectCode();
    }

    return $this->collection[$offset];
  }

  // implement the other abstract methods
}

我相信您收到的错误来自无效的属性访问器
->“NULL”

isset函数应用于检查数组索引是否存在,例如在objCodes上检查的[0]索引:

if(isset($this->objCodes[0])) {
如果不知道对象代码数组(属性为
SignupCode
)中当前的对象类型,我无法具体回答设置默认值的问题,但是如果我使用类
ObjectCode
作为示例,您可以在数组元素上设置默认值,如下所示:

$result = mysql_query("Some Query");
while($temp = mysql_fetch_assoc($result)
{
    $myObj = new stdClass;
    $myObj->SignupCode = $temp['SignupCode'];
    $myObjs[] = $myObj;
}
if(isset($myObjs[0]->SignupCode))
if(!isset($this->objCodes[0])) {
  $this->objCodes[0] = new ObjectCode();
}
如果我知道更多关于您试图通过代码块实现的内容,我可能会更具描述性

更新:如果确实希望确保集合始终返回值,则可以创建实现的容器,然后实现在未找到请求的索引时返回默认值:

public class ObjectCodeContainer implements ArrayAccess {
  private $collection;

  public function __construct() {
    $this->collection = array();
  }

  public function offsetGet($offset) {
    if(!isset($this->collection[$offset])) {
      $this->collection[$offset] = new ObjectCode();
    }

    return $this->collection[$offset];
  }

  // implement the other abstract methods
}

你得到了什么错误信息?不要引用
NULL
,除非你希望它是一个字符串而不是NULL值。你得到了什么错误信息?不要引用
NULL
,除非你希望它是一个字符串而不是NULL值。使用empty()会阻止值0或“0”的正确性。我这样做了,我解释OP的问题的方式,他/她想使用isset进行测试,因为它要么是一个具有名为SignupCode的set成员的对象,要么不是。酷,这很有用,当前DB默认为“null”,这是导致失败的原因。让我再试一次……谢谢。事实上,我如何创建一个“默认”值并将其分配给$this->objCodex[0]=$string?使用empty()将阻止值0或“0”的正确性。我这样做了,并且按照我解释OP问题的方式,他/她希望使用isset进行测试,因为它要么是一个名为SignupCode的集合成员,要么不是。酷,这很有用,目前DB默认为“null”,这是导致失败的原因。让我再试一次……谢谢。实际上,我如何创建一个“默认”值并将其分配给$this->objCodex[0]=$string?@Chacha102-
如何在php中为数组定义默认值以避免未定义的偏移量?
对,但这只适用于需要特定已知键的默认值的情况。@Chacha102-
如何在php中为数组定义默认值以避免未定义的偏移量?
对,但这只适用于需要特定已知键的默认值的情况。