Ciao, ho un problema con i namespace in PHP ( lo ammetto, non ci ho mai capito nulla in PHP ) ovvero, non è che non comprenda il meccanismo che ne sta alla base, ma il loro funzionamento.
Mi spiego: ho seguito l'esempio che sta sul manuale alla pagina https://www.php.net/manual/en/language.namespaces.php e poi ho iniziato a modificare i file, tanto per giocare e capirne il funzionamento, e ho trovati degli errori per ora, per me, incomprensibili.
Ecco i semplici file:
E poi il chiamante.
E mi da errore sul $due.
In pratica mi pare di capire che se uso l'alias mi da errore, ma non ne comprendo il motivo, i file con le classi sono state trovate, quindi i file ci sono, anche perché se no l'errore sarebbe ben diverso.
Mi spiego: ho seguito l'esempio che sta sul manuale alla pagina https://www.php.net/manual/en/language.namespaces.php e poi ho iniziato a modificare i file, tanto per giocare e capirne il funzionamento, e ho trovati degli errori per ora, per me, incomprensibili.
Ecco i semplici file:
PHP:
// File 1
namespace file_1;
error_reporting(-1);
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
class File1 {
public $foo;
function __construct() {
$this->foo = 'Sono il primo!';
}
function __toString() {
return $this->foo;
}
}
PHP:
// File 2
namespace file_2;
error_reporting(-1);
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
class File2 {
public $foo;
function __construct() {
$this->foo = 'Sono il secondo!';
}
function __toString() {
return $this->foo;
}
}
PHP:
// File 3
namespace file_3;
error_reporting(-1);
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
class File3 {
public $foo;
function __construct() {
$this->foo = 'Sono il terzo!';
}
function __toString() {
return $this->foo;
}
}
E poi il chiamante.
PHP:
// Chiamante
namespace chiamante;
error_reporting(-1);
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
include_once( __DIR__ . '/file1.php');
include_once( __DIR__ . '/file2.php');
include_once( __DIR__ . '/file3.php');
use file_1 as uno;
use file_2 as due;
use file_3;
$uno = new \file_1\File1();
$due = new \due\File2();
$tre = new \file_3\File3();
echo $uno . ' ' . $due . ' ' .$tre;
Fatal error: Uncaught Error: Class 'due\File2' not found in C:\Apache\users\marco\BABILON\NS\chiamante.php on line 18
( ! ) Error: Class 'due\File2' not found in C:\Apache\users\marco\BABILON\NS\chiamante.php on line 18
In pratica mi pare di capire che se uso l'alias mi da errore, ma non ne comprendo il motivo, i file con le classi sono state trovate, quindi i file ci sono, anche perché se no l'errore sarebbe ben diverso.