【问题标题】:does isset php function checks string lengthisset php函数是否检查字符串长度
【发布时间】:2018-06-04 14:44:46
【问题描述】:

在我网站的注册表单中,以下 php 代码控制用户名字段:

if (!isset($value[4])){
    $return = $register_msg['_register_some_msg'];
} 

这段代码有什么作用? 检查字符串长度有什么作用吗? 目前它强制使用最少 3 个字符的名字,但正如我搜索的那样,strlen() 函数似乎检查了那里不存在的字符串的长度。

【问题讨论】:

  • 多一点代码至少有助于确定 $value 实际设置的位置
  • 如果我错了,请纠正我,但 AFAIK isset 只检查内存中是否存在变量名并具有一定的价值。它不检查其他任何东西。如果你在其中放入一个布尔值false,例如it will still workedit 问题突然变了,所以这条评论不再有效。
  • 是的,这是检查字符串长度。字符串可以使用数组语法访问其单个字符,因此这是检查4th 位置是否未设置。

标签: php wordpress


【解决方案1】:

是的,这段代码正在检查字符串长度。

看来您有两个数组。

$value 是一个数值数组,您检查是否设置了第 5 个元素。 (索引从 0 开始)。

$register_msg 是一个关联数组,而不是数字作为索引,它使用键。在这里,您将键 _register_some_msg 的值分配给您的返回变量。

另一个选项是 $value 是一个字符串,它使用不好的做法来检查每个字母,将它们引用为数组键:

<?php

$x = 'abcd';
echo $x[3];

//output: d

这很糟糕。使用strlen() 代替http://php.net/manual/en/function.strlen.php

【讨论】:

  • $value 很可能是一个字符串,!isset($value[4]) 是检查字符串长度的基本方法。
  • 天哪,这太恶心了,哈哈,忘记了@castis那个疯狂的坏习惯,更新答案
  • 为什么这是不好的做法?当然,对于没有用 C 编程的人来说,这并不是真正的可读性和清晰性,但为什么这是不好的做法呢?字符串只是字符数组,因此您应该能够使用数组语法访问它们。
  • 以这种方式检查本质上并没有错。这只是让外行感到困惑。
  • @Piskvor 我在写评论时正在考虑这个问题。没时间检查。所以谢谢!
【解决方案2】:

这里的isset() 方法只是验证$value[4](您的对象、字符串或其他)是否存在。

【讨论】:

  • 对不起,我是 php 新手,我还不清楚。此代码确实是 WordPress 会员专业插件的一部分,它仅控制用户在注册表单的“名字”字段中输入的内容。 $value 是用户作为名字输入的字符串。正如我因为这段代码而提到的,系统接受包含 3 个或更多字符的名字。 delboy 说“你检查是否设置了第 5 个元素”但结果不同。
  • 一个字符串可以写成一个字符数组。例如:$string= 'name'; $string[1] 应该返回第二个元素,所以它返回字符'a'。在您的代码中,该方法检查第 5 个元素是否不为空,这是一种检查字符串长度是否正确的方法。
  • 感谢这个伟大且易于理解的解释,但似乎指定字符串长度是一种不好的方法。我可以简单地删除这行代码并使用 strlen() 函数吗?删除它会有什么问题吗?名字字段存在的唯一其他代码是: case 'first_name': if (!preg_match('/^[\x{0600}-\x{06FF}]*$/u', $value)){ $返回 = $register_msg['ihc_register_firstname_error_msg']; }
  • 我正在使用最新版本的“indeed members pro”插件,我想知道他们为什么使用这个糟糕的 isset() 函数来检查字符串长度,而不是在他们的代码中使用 strlen() 函数! !!!!
  • 其实可以用strlen()方法代替isset()方法。如果您想在项目中使用 strlen(),请按原样使用:if(strlen($value)&gt;3){$return = $register_msg['_register_some_msg'];}。试试看,如果它有效,请告诉我;)
猜你喜欢
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
相关资源
最近更新 更多