1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 16:22:37 +01:00
Files
archived-php-src/ext/spl/tests/fixedarray_003.phpt
George Peter Banyard e9e06279c1 Refactor SplFixedArray (#7168)
* 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
2021-06-18 15:22:52 +01:00

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