скрипт с именем tester.php
<?php namespace my; class Tester { public function greet() { echo "Hello ! <br />"; } }
новый скрипт с именем tester1.php :
<?php use my; $obj = new Tester(); $obj->greet();
Когда я запускаю tester1.php
я получаю эту ошибку:
Warning: The use statement with non-compound name 'my' has no effect in /opt/lampp/htdocs/tester_1.php on line 2 Fatal error: Class 'Tester' not found in /opt/lampp/htdocs/tester_1.php on line 4
Почему я получаю эту ошибку? Оба этих сценария находятся в одном каталоге /opt/lampp/htdocs/
.
Оператор use
предназначен для наложения имени класса / интерфейса / пространства имен, а не на импорт пространства имен, чтобы его можно было использовать. Чтобы использовать ваше пространство имен, вам просто нужно поместить namespace my;
в верхней части файла tester1.php
(а также включить исходный файл, чтобы было доступно определение класса).
<?php namespace my; include("tester.php"); $obj = new Tester(); $obj->greet();
в<?php namespace my; include("tester.php"); $obj = new Tester(); $obj->greet();
Если вы хотите использовать псевдоним другого имени, вы можете use
, например,
<?php namespace my; use my\Tester as Blah; include("tester1.php"); $obj = new Blah(); $obj->greet();
в<?php namespace my; use my\Tester as Blah; include("tester1.php"); $obj = new Blah(); $obj->greet();
Пытаться
<?php use my as Something;
это сработает.
Полный код.
First.php
<?php namespace my; use my as Blah; include("second.php"); $obj = new Tester(); $obj->greet();
в<?php namespace my; use my as Blah; include("second.php"); $obj = new Tester(); $obj->greet();
second.php
<?php namespace my; class Tester { public function greet() { echo "Hello ! <br />"; } }
Вам нужно объявить namespace
при формулировке перед любым кодом, включая doctype