Suppose the following piece of code:
<?php
declare (strict_types = 1);
define('SOURCE_PATH', 'C:\xampp\htdocs\atlantis\ProductImages\\');
$dest = explode('\\', SOURCE_PATH);
$dest[count($dest) - 2] = 'ToUpload';
$dest = implode('\\', $dest);
function transfer(string $file)
{
global $dest;
if (!@chdir($dest)) {
mkdir($dest);
chdir($dest);
}
// ...
}
function compress(string $path)
{
global $dest;
$zip = new ZipArchive();
$zip->open(dirname($dest, 1) . '\\' . explode('\\', SOURCE_PATH)[count(explode('\\', SOURCE_PATH)) - 2] . '.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
// ...
}
So, intelephense on VS Code keeps complaining about Expected type 'string'. Found 'string[]'.
on all four instances where I use $dest
in my functions...
What's that intelephense doesn't like about my code? Note that page runs fine... And what's that string[] type? implode()
returns a string, so what's the problem here?
EDIT: It's most probably a bug of intelephense...
I calculated $dest
like this:
$dest = dirname(SOURCE_PATH, 1) . '\ToUpload\\';
which doesn't involve explode()
ing, and indeed the error is gone... So somehow intelephense fails to take into consideration that implode()
returns a string and not an array...
Actually, I filed a bug report on github and I'm awaiting Mewburn's response on this... :)