elasticsearch,namespaces,Php,Oop,elasticsearch,Namespaces" /> elasticsearch,namespaces,Php,Oop,elasticsearch,Namespaces" />

PHP使用私有函数中另一个类的名称空间

PHP使用私有函数中另一个类的名称空间,php,oop,elasticsearch,namespaces,Php,Oop,elasticsearch,Namespaces,所以我使用了更具体的Elasticsearch,它可以通过composer获得。这是5.0版本。我试图在类中的私有函数中构建客户机连接。基本上我想要的是一个带有2个私有函数的类。第一个专用函数将使用以下命令创建客户端连接: $hosts = ['host' => 'http://censored']; $clientBuilder = ClientBuilder::create(); $clientBuilder->setHosts($hosts); $clientBuilder-&

所以我使用了更具体的Elasticsearch,它可以通过composer获得。这是5.0版本。我试图在类中的私有函数中构建客户机连接。基本上我想要的是一个带有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($type)和query($query),这将传递给第二个私有函数。第二个私有函数将启动对Elasticsearch的API请求,并将结果返回给公共函数,然后公共函数将结果回显给用户

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


提前感谢您,很抱歉发了这么长的帖子。

无论您在哪里称呼它,用法都是一样的

例如,文件foo.php:

namespace Foo\Bar;

function Baz() { echo 'Baz()...'; }

class Qux
{
    public function         PublicMethod() {
        echo 'PublicMethod()...';
    }
    public static function  StaticMethod() {
        echo 'StaticMethod()...';
    }

}
如果您位于同一命名空间中,则可以使用非限定名称,或者
使用
命名空间:

namespace Foo\Bar;
include 'foo.php';

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();
全局平均值上的反斜杠
\

include 'foo.php';

\Foo\Bar\Baz();

\Foo\Bar\Qux::StaticMethod();

$qux = new \Foo\Bar\Qux();
$qux->PublicMethod();