PHP继承:如何从父级引用子对象?

时间:2018-06-13 17:14:24

标签: php inheritance amazon-s3

我正在尝试编写一些使用继承从AWS访问S3的图像的代码。我已经让代码在一个长文件中工作,但它有点笨拙。

我是PHP继承的新手,所以我不确定这里出了什么问题。我有一个名为PersonPics的类,它继承自myAWS。这些在第三个文件downloadImages中引用。

我已追踪到与$s3Client变量相关的错误。

当我将myAWS类中编写的代码写为$this->s3Client->getIterator(...)时,我在null错误上调用成员函数时出错。如果我将其更改为$this->$s3Client->getIterator(...),我会得到一个未定义的变量s3ClientError,尽管它是在构造函数中定义的。

我做错了什么?

myAWS.php

class myAWS{
    private $s3Client;
    private $bucket = 'my-bucket';

    function __construct() {
        $S3Client = S3Client::factory(array( ... )); //credentials inserted
    }

    function getImages($name){

        $img_iter = $this->s3Client->getIterator('ListObjects', array(
               'Bucket' => $bucket,
               'Prefix' => $name . '/img',
        ));

        // ... more
        return img_arr;
    }
}

PersonPics.php

error_reporting(E_ALL);
ini_set("display_errors","On");
require_once __DIR__ . '/myAWS.php';

class PersonPics extends myAWS {
    public $name;

    function __construct($name){
        $this->$name = $name;
    }

    function getImages(){
         $pic_arr = parent::getImages($this->name);
         // more functionality to be added later using $pic_arr
    }
}

downloadImages.php

require_once __DIR__ . '/myAWS.php';
require_once __DIR__ . '/PersonPics.php';

$name = $_GET["name"];
$aws = new myAWS();
$lookupPerson = new PersonPics($name);
$images = $lookupPerson->getImages();

2 个答案:

答案 0 :(得分:1)

在构造函数中,您正在设置局部变量。你的意思是设置成员变量。将其更改为:

function __construct() {
    $this->s3Client = S3Client::factory(array( ... )); //credentials inserted
}

注意''在变量名中也是如此。

答案 1 :(得分:0)

用以下代码替换myAWS.php类,让我知道它是否适合你

class myAWS{
    private $s3Client;
    private $bucket = 'my-bucket';

    function __construct() {
        $this->s3Client = S3Client::factory(array( ... )); //credentials inserted
    }

    function getImages($name){

        $img_iter = $this->s3Client->getIterator('ListObjects', array(
               'Bucket' => $bucket,
               'Prefix' => $name . '/img',
        ));

        // ... more
        return img_arr;
    }
}