我在从不同的命名空间类中的命名空间类调用函数时遇到了一些麻烦。在下面的虚拟示例中,我想知道如何在Class1中使用Class2。我收到了错误:
在class1.php中找不到特征'name1 \ name2 \ Class2'
代码:
#file index.php
require "class1.php";
require "class2.php";
$class1 = new name1\Class1();
$class1->sayHello();
#file class1.php
namespace name1{
class Class1{
use name2\Class2;
public function sayHello(){
echo Class2::staticFunction();
}
}
}
#file class2.php
namespace name2{
class Class2{
public static function staticFunction(){
return "hello!";
}
}
}
感谢您的任何建议。
答案 0 :(得分:1)
在您的第一堂课中,您的特质是将{2}称为use name2\Class2
,但您仍然在name1{}
命名空间内,因此实际上您将其称为:use name1\name2\Class2
所以,你需要改变
use name2\Class2;
至use \name2\Class2
试试这个。
namespace name1{
use \name2\Class2;
class Class1{
public function sayHello(){
echo Class2::staticFunction();
}
}
}
#file class2.php
namespace name2{
class Class2{
public static staticFunction(){
return "hello!";
}
}
}
另外,另一个提示:如果要在单独的文件中分离类,则不需要像完成它们那样将它们分开。只需将命名空间简单地称为:
// file1.php
namespace person;
class name{}
//file2.php
namespace address;
class name{}
答案 1 :(得分:1)
好的,所以你已经修复了几个错误。 这是您需要的工作代码:
# index.php
include "class1.php";
include "class2.php";
$class1 = new name1\Class1();
$class1->sayHello();
# class1.php
namespace name1;
use name2\Class2;
class Class1{
public function sayHello(){
echo Class2::staticFunction();
}
}
# class2.php
namespace name2;
class Class2{
public static function staticFunction(){
return "hello!";
}
}
一些解释:
use
用于traits
而不是namespace
namespace
中不需要用大括号括起来include
,include_once
,require
或require_once
,而不是import
答案 2 :(得分:1)
为什么不放弃静态方法而只是注入类?看起来像是为了这么简单的事情而进行额外的工作。那是什么函数参数。
namespace name1{
use \name2\Class2;
class Class1{
public function sayHello($Class2){
echo $Class2->someFunction();
}
}
}
namespace name2{
class Class2{
public function someFunction(){
return "hello!";
}
}
}
#index.php
include "class1.php";
include "class2.php";
$Class1 = new name1\Class1();
$Class2 = new name2\Class2();
$Class1->sayHello($Class2);
//hello!