mirror of
https://github.com/php/php-src.git
synced 2026-03-24 16:22:37 +01:00
* Move spl_offset_convert_to_long() to spl_fixedarray.c It is only used there, which explains its weird offset semantics * Refactor SplFixedArray offset handling - Implement warning for resource type - Throw a proper TypeError instead of a RuntimeException * Use a proper Error to signal that [] cannot be used with SplFixedArray * Refactor SplFixedArray has_dimension helper * Drop some ZPP tests
223 lines
4.1 KiB
PHP
223 lines
4.1 KiB
PHP
--TEST--
|
|
SPL: FixedArray: Non integer offset handling
|
|
--FILE--
|
|
<?php
|
|
$o = new SplFixedArray(10);
|
|
$r = fopen('php://memory', 'r+');
|
|
|
|
|
|
echo 'Write context', \PHP_EOL;
|
|
$o[false] = 'a';
|
|
$o[true] = 'b';
|
|
$o[2.5] = 'c';
|
|
|
|
try {
|
|
$o[[]] = 'd';
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
$o[new stdClass()] = 'e';
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
$o[$r] = 'f';
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
|
|
$o['3'] = 'g';
|
|
|
|
try {
|
|
$o['3.5'] = 'h';
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
$o['03'] = 'i';
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
$o[' 3'] = 'j';
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
|
|
|
|
echo 'Read context', \PHP_EOL;
|
|
var_dump($o[false]);
|
|
var_dump($o[true]);
|
|
var_dump($o[2.5]);
|
|
|
|
try {
|
|
var_dump($o[[]]);
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump($o[new stdClass()]);
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump($o[$r]);
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
|
|
var_dump($o['3']);
|
|
|
|
try {
|
|
var_dump($o['3.5']);
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump($o['03']);
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump($o[' 3']);
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
|
|
|
|
echo 'isset()', \PHP_EOL;
|
|
var_dump(isset($o[false]));
|
|
var_dump(isset($o[true]));
|
|
var_dump(isset($o[2.5]));
|
|
|
|
try {
|
|
var_dump(isset($o[[]]));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump(isset($o[new stdClass()]));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump(isset($o[$r]));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
|
|
var_dump(isset($o['3']));
|
|
|
|
try {
|
|
var_dump(isset($o['3.5']));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump(isset($o['03']));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump(isset($o[' 3']));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
|
|
echo 'empty()', \PHP_EOL;
|
|
var_dump(empty($o[false]));
|
|
var_dump(empty($o[true]));
|
|
var_dump(empty($o[2.5]));
|
|
|
|
try {
|
|
var_dump(empty($o[[]]));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump(empty($o[new stdClass()]));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump(empty($o[$r]));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
|
|
var_dump(empty($o['3']));
|
|
|
|
try {
|
|
var_dump(empty($o['3.5']));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump(empty($o['03']));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
try {
|
|
var_dump(empty($o[' 3']));
|
|
} catch (\TypeError $e) {
|
|
echo $e->getMessage(), "\n";
|
|
}
|
|
?>
|
|
--EXPECTF--
|
|
Write context
|
|
|
|
Deprecated: Implicit conversion from float 2.5 to int loses precision in %s on line %d
|
|
Illegal offset type
|
|
Illegal offset type
|
|
|
|
Warning: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d
|
|
Illegal offset type
|
|
Illegal offset type
|
|
Illegal offset type
|
|
Read context
|
|
string(1) "a"
|
|
string(1) "b"
|
|
|
|
Deprecated: Implicit conversion from float 2.5 to int loses precision in %s on line %d
|
|
string(1) "c"
|
|
Illegal offset type
|
|
Illegal offset type
|
|
|
|
Warning: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d
|
|
string(1) "f"
|
|
string(1) "g"
|
|
Illegal offset type
|
|
Illegal offset type
|
|
Illegal offset type
|
|
isset()
|
|
bool(true)
|
|
bool(true)
|
|
|
|
Deprecated: Implicit conversion from float 2.5 to int loses precision in %s on line %d
|
|
bool(true)
|
|
Illegal offset type
|
|
Illegal offset type
|
|
|
|
Warning: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d
|
|
bool(true)
|
|
bool(true)
|
|
Illegal offset type
|
|
Illegal offset type
|
|
Illegal offset type
|
|
empty()
|
|
bool(false)
|
|
bool(false)
|
|
|
|
Deprecated: Implicit conversion from float 2.5 to int loses precision in %s on line %d
|
|
bool(false)
|
|
Illegal offset type
|
|
Illegal offset type
|
|
|
|
Warning: Resource ID#%d used as offset, casting to integer (%d) in %s on line %d
|
|
bool(false)
|
|
bool(false)
|
|
Illegal offset type
|
|
Illegal offset type
|
|
Illegal offset type
|