PHP isset()bug?结合NULL

时间:2018-03-13 12:04:14

标签: php debugging

美好的一天,

我有一个奇怪的错误。

一般来说,或者至少据我所知。 在PHP中使用isset()时,它会明确检查变量是否存在。它不会检查其中的内容或是否为空。

如果我想知道它是否是一个空变量。然后我应该使用empty()

现在我使用以下代码

    if(isset($tab['content']) === true){

但是,我发现我的代码总是使用 else 语句。

    ///######## IF NO CONTENT SET
    else {
        debug((int)isset($tab['content']), $tab, gettype($tab['content']));

所以我解析了{因此调试函数}变量内容,发现实际上已经设置了“内容”。但它是NULL。

0




----


Array
(
    [title] => Location
    [id] => location
    [url] => 
    [content] => 
    [active] => 
    [ajax] => 
    [icon] => 
)



----



NULL

我的意见非常奇怪。

Since : (int)isset($tab['content'])
Returns : 0

并且

gettype($tab['content'])
Returns : NULL

我错过了什么吗? 我究竟做错了什么?或者我遇到了臭名昭着的PHP功能之一?

修改

指出: Karsten Koop 我忽略了我不应该使用isset()的事实。而是:array_key_exists()

所以这是我的错。谢谢你的回答!

1 个答案:

答案 0 :(得分:3)

来自documentation

  

确定变量是否已设置且不为NULL。

顺便说一句, setContentView(R.layout.activity_drugs); lv= findViewById(R.id.idlistview); searchView= findViewById(R.id.idsearch); drugadapter= new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data); lv.setAdapter(drugadapter); searchView.setOnQueryTextListener(this); View focused = getCurrentFocus(); focused.clearFocus(); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int i, long id) { Intent intent2=new Intent(DrugsActivity.this,ResultDrugActivity.class); intent2.putExtra("drug",lv.getItemAtPosition(i).toString()); intent2.putExtra("age", age11 ); intent2.putExtra("weight", weight11 ); startActivity(intent2); } }); boolean onQueryTextChange(String newText) { drugadapter.getFilter().filter(newText); return false; } 返回一个布尔值,不需要在isset()中使用===true