ArrayAccess::offsetExists

(PHP 5 >= 5.0.0)

ArrayAccess::offsetExistsОпределяет, существует ли заданное смещение (ключ)

Описание

abstract public boolean ArrayAccess::offsetExists ( mixed $offset )

Определяет, существует или нет данное смещение (ключ).

Данный метод исполняется, когда используется функция isset() или функция empty() для объекта, реализующего интерфейс ArrayAccess.

Замечание:

Когда используется функция empty(), метод ArrayAccess::offsetGet() вызывается и результат проверяется только в случае, если метод ArrayAccess::offsetExists() возвращает TRUE.

Список параметров

offset

Смещение (ключ) для проверки.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Замечание:

Возвращаемое значение будет приведено к логическому типу, если возвращаемое значение не является логическим.

Примеры

Пример #1 Пример использования ArrayAccess::offsetExists()

<?php
class obj implements arrayaccess {
    public function 
offsetSet($offset$value) {
        
var_dump(__METHOD__);
    }
    public function 
offsetExists($var) {
        
var_dump(__METHOD__);
        if (
$var == "foobar") {
            return 
true;
        }
        return 
false;
    }
    public function 
offsetUnset($var) {
        
var_dump(__METHOD__);
    }
    public function 
offsetGet($var) {
        
var_dump(__METHOD__);
        return 
"value";
    }
}

$obj = new obj;

echo 
"Выполняется obj::offsetExists()\n";
var_dump(isset($obj["foobar"]));

echo 
"\nВыполняется obj::offsetExists() и obj::offsetGet()\n";
var_dump(empty($obj["foobar"]));

echo 
"\nВыполняется obj::offsetExists(), но *не* obj:offsetGet() поскольку нечего возвращать\n";
var_dump(empty($obj["foobaz"]));
?>

Результатом выполнения данного примера будет что-то подобное:

Выполняется obj::offsetExists()
string(17) "obj::offsetExists"
bool(true)

Выполняется obj::offsetExists() и obj::offsetGet()
string(17) "obj::offsetExists"
string(14) "obj::offsetGet"
bool(false)

Выполняется obj::offsetExists(), но *не* obj:offsetGet() поскольку нечего возвращать
string(17) "obj::offsetExists"
bool(true)

Коментарии

Note that even though isset/empty works on classes implementing ArrayAccess, array_key_exists does not. At least not in PHP 5.3.
2015-03-02 09:10:08
http://php5.kiev.ua/manual/ru/arrayaccess.offsetexists.html
Автор:
If you care about key-strictness, you may need to use an alternative solution (maybe overriding offsetExists() in subclass(es)). So, offsetExists() acts like array_key_exists() and does not handle the key types. Here;

<?php
$array 
= ['one''two'3.=>'boom!'];
$arrayObject = new ArrayObject($array);
$key '3';
var_dump(array_key_exists($key$array)); // bool(true)
var_dump(in_array($keyarray_keys($array), true)); // bool(false)
var_dump($arrayObject->offsetExists($key)); // bool(true)
var_dump(in_array($keyarray_keys($arrayObject->getArrayCopy()), true)); // bool(false)

// @override;
public function offsetExists($key)
{
   
// make a strict check
   
return in_array($keyarray_keys($this->getArrayCopy()), true);
}
?>
2019-02-08 13:41:49
http://php5.kiev.ua/manual/ru/arrayaccess.offsetexists.html
Автор:
It seems that in PHP 7, if this method returns FALSE then offsetGet() will return NULL (in PHP 5, offsetGet() didn't first check what value offsetExists() returned).  So if your code suddenly stops working when you upgrade to PHP 7 make sure that offsetExists() returns a sensible value!
2019-10-23 00:24:20
http://php5.kiev.ua/manual/ru/arrayaccess.offsetexists.html

    Поддержать сайт на родительском проекте КГБ