【问题标题】:PHP Use Namespace from Another class within private functionPHP在私有函数中使用另一个类的命名空间
【发布时间】:2017-11-04 11:41:24
【问题描述】:

所以我更具体地使用了可通过 composer 获得的 Elasticsearch。这是5.0版本。我正在尝试在类内的私有函数内建立客户端连接。基本上我想要的是 1 个具有 2 个私有函数的类。第一个私有函数将使用以下方法创建客户端连接:

$hosts = ['host' => 'http://censored'];
$clientBuilder = ClientBuilder::create();
$clientBuilder->setHosts($hosts);
$clientBuilder->setSerializer('\Elasticsearch\Serializers\EverythingToJSONSerializer');
$client = $clientBuilder->build();
$searchParams = ['index' => 'main'];

请注意,下面提到的第二个私有函数必须可以访问 $searchparams 和 $client。

第二个私有函数将从公共函数中获取类型和查询,并使用 $client 和 $searchparam 向 Elasticsearch 发起 API 请求

总结:公共函数将从另一个文件中调用。要使用它,需要传递类型 ($type) 和查询 ($query),这将传递给第二个私有函数。第二个私有函数将向 Elasticsearch 发起 API 请求并将结果返回给公共函数,然后公共函数会将结果回显给用户。

我相信这是可能的,但我不知道如何在私有函数中调用或使用另一个命名空间。将其放入私有函数并预先自动加载 Elasticsearch 会导致找不到 ClientBuilder。

提前谢谢你,很抱歉这么长的帖子。

【问题讨论】:

    标签: php oop elasticsearch namespaces


    【解决方案1】:

    不管你叫什么名字,用途都是一样的……

    例如文件 foo.php:

    namespace Foo\Bar;
    
    function Baz() { echo 'Baz()...'; }
    
    class Qux
    {
        public function         PublicMethod() {
            echo 'PublicMethod()...';
        }
        public static function  StaticMethod() {
            echo 'StaticMethod()...';
        }
    
    }
    

    如果你在同一个命名空间或use命名空间,你可以使用unqualified name

    namespace Foo\Bar;
    include 'foo.php';
    
    Baz();
    
    Qux::StaticMethod();
    
    $qux = new Qux();
    $qux->PublicMethod();
    

    namespace MyNamespace;
    include 'foo.php';
    
    use function Foo\Bar\Baz;
    use Foo\Bar\Qux;
    
    Baz();
    
    Qux::StaticMethod();
    
    $qux = new Qux();
    $qux->PublicMethod();
    

    限定名

    namespace MyNamespace;
    include 'foo.php';
    
    use Foo\Bar;
    
    Bar\Baz();
    
    Bar\Qux::StaticMethod();
    
    $qux = new Bar\Qux();
    $qux->PublicMethod();
    

    完全限定名称

    include 'foo.php';
    
    \Foo\Bar\Baz();
    
    \Foo\Bar\Qux::StaticMethod();
    
    $qux = new \Foo\Bar\Qux();
    $qux->PublicMethod();
    

    反斜杠\ 表示全局

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多