从不同的 class 和命名空间调用函数
Call function from different class and namespace
我在从另一个命名空间 class 中的命名空间 class 调用函数时遇到了一些问题。在下面的虚拟示例中,我想知道如何在 Class1 中使用 Class2。我收到错误:
Trait 'name1\name2\Class2' not found in class1.php
代码:
#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!";
}
}
}
感谢您的任何建议。
在你的第一个 class 中,你的特征调用 class2 作为 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!";
}
}
}
此外,还有另一个提示:如果您将 classes 分隔在单独的文件中,则不需要像以前那样分隔它们。只需将名称空间简单地称为:
// file1.php
namespace person;
class name{}
//file2.php
namespace address;
class name{}
好的,我已经修复了几个错误。
这是您需要的工作代码:
# 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!";
}
}
一些解释:
- 在 class 定义中,
use
用于使用 traits
而不是 namespace
- 在PHP中
namespace
不需要用大括号括起来
- 在 PHP 中,您包含带有
include
、include_once
、require
或 require_once
的文件,而不是 import
为什么不删除静态方法而只注入 class?似乎要为如此简单的事情做额外的工作。这就是函数参数的用途。
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!
我在从另一个命名空间 class 中的命名空间 class 调用函数时遇到了一些问题。在下面的虚拟示例中,我想知道如何在 Class1 中使用 Class2。我收到错误:
Trait 'name1\name2\Class2' not found in class1.php
代码:
#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!";
}
}
}
感谢您的任何建议。
在你的第一个 class 中,你的特征调用 class2 作为 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!";
}
}
}
此外,还有另一个提示:如果您将 classes 分隔在单独的文件中,则不需要像以前那样分隔它们。只需将名称空间简单地称为:
// file1.php
namespace person;
class name{}
//file2.php
namespace address;
class name{}
好的,我已经修复了几个错误。 这是您需要的工作代码:
# 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!";
}
}
一些解释:
- 在 class 定义中,
use
用于使用traits
而不是namespace
- 在PHP中
namespace
不需要用大括号括起来 - 在 PHP 中,您包含带有
include
、include_once
、require
或require_once
的文件,而不是import
为什么不删除静态方法而只注入 class?似乎要为如此简单的事情做额外的工作。这就是函数参数的用途。
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!