Trying to access array offset on value of type null
Migrating from php 7.1 to 7.4. We have like 500 functional tests for an API, and some of them started to fail with an error after the migration was complete. These tests were passing before everywhere, and now fail everywhere - not all, just 39.
Environment information:
- php 7.4
- codeception
- yii2
Stack trace:
...\api\vendor\codeception\codeception\src\Codeception\Subscriber\ErrorHandler.php:83
...\api\tests\functional\SomeFileHereCest.php:72
...\api\vendor\codeception\codeception\src\Codeception\Lib\Di.php:127
...\api\vendor\codeception\codeception\src\Codeception\Test\Cest.php:138
...\api\vendor\codeception\codeception\src\Codeception\Test\Cest.php:97
...\api\vendor\codeception\codeception\src\Codeception\Test\Cest.php:80
...\api\vendor\codeception\codeception\src\Codeception\Test\Test.php:88
... more stuff here, not important
Since ErrorHandler.php:83
this is just catching the error, let's look at the SomeFileHereCest.php:72
:
// declaration of the apiPrefix variable in the class.
protected $apiPrefix;
//...
public function _before(FunctionalTester $I)
{
$this->apiPrefix = $this->config['backend']['api_prefix']; // this is the line 72
//... more similar stuff later
So the $this->config['backend']['api_prefix']
this is a string("v1")
And I dont see where is the issue with this and how to dig into it deeper. Any ideas?
check isset($this->config)
, isset($this->config['backend'])
and isset($this->config['backend']['api_prefix'])
first
2 Answers
Sounds like your variable isn't set.
Check with the following isset calls:
isset($this->config);
isset($this->config['backend']);
isset($this->config['backend']['api_prefix']);
You can actually check multiple vars in one isset call (isset($x, $y, $z)
), but this will let you see which var specifically is missing
use (??) (double question mark operator
) ("null coalescing operator
") to avoid unset arrays.
this unit test is giving me "success"
class PhpTest extends TestCase
{
public function test_php_74()
{
//Trying to access array offset on value of type null
$this->assertSame('7.4.9', phpversion());
$a = null;
$this->assertTrue($a ?? true);
$this->assertTrue($a['a'] ?? true);
$this->assertTrue($a['a']['a'] ?? true);
$a = [];
$this->assertSame([], $a);
$this->assertTrue($a['a'] ?? true);
$this->assertTrue($a['a']['a'] ?? true);
}
}
0 comments:
Post a Comment
Thanks