Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

无法通过 isset($this->fields->fieldName) 判断自定义字段是否存在 #1529

Open
klxf opened this issue Jan 30, 2023 · 2 comments
Open
Labels
duplicate This issue or pull request already exists

Comments

@klxf
Copy link

klxf commented Jan 30, 2023

1. 该问题的重现步骤是什么?

在模板中尝试使用 isset($this->fields->fieldName) 判断一个自定义字段是否存在

if(isset($this->fields->fieldName)){
    echo "字段存在";
}else{
    echo "字段不存在";
}

2. 你期待的结果是什么?实际看到的又是什么?

期待的结果:正确判断字段是否存在
实际上:始终输出“字段不存在”

使用下面的方法却可以

$fieldName = $this->fields->fieldName;
if(isset($fieldName)){
    echo "字段存在";
}else{
    echo "字段不存在";
}

3. 问题出现的环境

  • 操作系统版本:CentOS 7.9.2009
  • Apache/NGINX 版本:Nginx 1.18.0
  • 数据库版本:MySQL 5.7.39
  • PHP 版本:7.4.20
  • Typecho 版本:1.2.0 (bad3ef6
  • 浏览器版本:Microsoft Edge 109.0.1518.70 (正式版本) (64 位)
@toberey
Copy link

toberey commented Mar 5, 2023

可以用这个方法解决。
#470 (comment)

@fenbox fenbox added the duplicate This issue or pull request already exists label Jan 4, 2024
@xiamuguizhi
Copy link

@chatgtp4

这个问题可能是由于在 PHP 中,isset() 函数不能用于判断对象的属性是否存在。在你的代码中,$this->fields 是一个对象,fieldName 是它的一个属性。当你尝试使用 isset($this->fields->fieldName) 时,PHP 实际上并不能正确地判断 fieldName 属性是否存在。

这是因为在 PHP 中,isset() 函数只能用于判断变量是否存在,而不能用于判断对象的属性是否存在。所以,当你尝试使用 isset($this->fields->fieldName) 时,PHP 实际上并不能正确地判断 fieldName 属性是否存在。

你的第二种方法可以工作,是因为你首先将 $this->fields->fieldName 的值赋给了一个变量 $fieldName,然后使用 isset($fieldName) 来判断这个变量是否存在。这样,你就可以正确地判断 fieldName 属性是否存在了。

所以,你可以继续使用你的第二种方法来判断自定义字段是否存在。也可以使用 property_exists() 函数来判断对象的属性是否存在,如下所示:

if(property_exists($this->fields, 'fieldName')){
    echo "字段存在";
}else{
    echo "字段不存在";
}

这样,你就可以正确地判断自定义字段是否存在了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
duplicate This issue or pull request already exists
Projects
None yet
Development

No branches or pull requests

4 participants