Проблема доступа к $ bucket в функции внутри класса - PullRequest
1 голос
/ 06 февраля 2020

Я пытаюсь создать повторно используемый класс БД, который позволит мне получить доступ к базовой функции c crud для моей базы данных couchbase. Когда я пытаюсь выполнить эту функцию, я получаю следующую ошибку:

PHP Notice:  Undefined variable: bucket in
/var/www/html/PHRETS/couchBase.php on line 26 PHP Fatal error: 
Uncaught Error: Call to a member function upsert() on null in
/var/www/html/PHRETS/couchBase.php:26 Stack trace:
#0 /var/www/html/PHRETS/retsphp.php(72): couchDb::upsert('OpenHouse::b769...', Object(OpenHouse))
#1 {main}   thrown in /var/www/html/PHRETS/couchBase.php on line 26

Итак, вопрос в том, как я могу получить доступ к объекту $ bucket из функции внутри класса?

Это мой код на диване базы. php

<?php

use Ramsey\Uuid\Uuid;
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;

$bucketName = "default";

// Establish username and password for bucket-access
$authenticator = new \Couchbase\PasswordAuthenticator();
$authenticator->username('Administrator')->password('Password');

// Connect to Couchbase Server - using address of a KV (data) node
$cluster = new CouchbaseCluster("couchbase://127.0.0.1");

// Authenticate, then open bucket
$cluster->authenticate($authenticator);
$bucket = $cluster->openBucket($bucketName);


class couchDb {



    public function upsert($DocId, $doc)
    {
        $result = $bucket->upsert($DocId, $doc);
        return ($result->cas);
    }

}

1 Ответ

2 голосов
/ 06 февраля 2020

так что $ bucket не известен в области видимости класса. Чтобы использовать «ведро» в вашем классе, вы можете добавить этот экземпляр. Пожалуйста, посмотрите на " Внедрение зависимости ", как это:

class couchDb {
    private $bucket;

    public function __construct(THE_TYPE_WICH_RETURNS_OPENBUCKET $bucket)
    {
        $this->bucket = $bucket;
    }

    public function upsert($DocId, $doc)
    {
        $result = $this->bucket->upsert($DocId, $doc);
        return ($result->cas);
    }

}
...