gpt4 book ai didi

php - 使用动态命名空间重新声明类

转载 作者:行者123 更新时间:2023-12-04 16:55:03 25 4
gpt4 key购买 nike

我正在尝试找到一种使用闭包“重新声明”类的方法。这是我到目前为止所得到的:

我有两个相同的简单类,除了命名空间。
test2.php 中的命名空间被称为“bla”,而在 new.php 中它被称为“newname”。除此之外,它们完全相同。

namespace bla; //test2.php
class A
{
public function __construct()
{ }

public function bla()
{
echo '[A bla]';
}
}
include ("new.php");
include ("test2.php");

use newname\A as A; // <-- dynamic

$a = new A();
$a->bla();

所以这段代码只是从'new.php'类而不是'test2.php'中的类中执行方法。这实际上是我需要的。但我的问题是代码的最后一部分。通常我会使用命名空间:
$a = new bla\A(); //Defined in 'test2.php'
$a->bla();

但是由于“use as”语句,我必须将该行更改为:
$a = new A(); //Defined in 'test2.php'
$a->bla();

所以在“A()”之前没有命名空间。

有没有办法保留“bla\A()”命名空间(在 test2.php 中定义),但它仍然从“new.php”调用方法?

最佳答案

在这种情况下,要从每个类调用,您应该编写 =>

$bla = new bla/A("");
$bla->bla(); // to call from bla.php

和二等舱
$newname = new newname/A("");
$newname->something(); // to call from newname.php

它会起作用,您不需要使用 use 关键字过度使用脚本

在一个文件中编写类也是一种很好的做法,命名空间像这样 =>
namespace bla{
class A{
// content
}
}

namespace newname{
class A{
// content
}
}

关于php - 使用动态命名空间重新声明类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10072175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com