PHP在私有函数

时间:2017-06-03 01:44:36

标签: php oop elasticsearch namespaces

所以我正在使用更具体的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。

提前感谢您,并为这篇长篇文章感到抱歉。

1 个答案:

答案 0 :(得分:0)

你在哪里调用它并不重要,使用完全相同......

例如文件foo.php:

namespace Foo\Bar;

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

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

}

如果您位于相同的命名空间或use命名空间中,则可以使用非限定名称

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();

在开始均值全局

上反斜杠\