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



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

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

我已经跟踪了与$s3Client变量相关的错误。

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

我做错了什么?

我的AWS

.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;
}
}

人物图片.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
}
}

下载图片.php

require_once __DIR__ . '/myAWS.php';
require_once __DIR__ . '/PersonPics.php';
$name = $_GET["name"];
$aws = new myAWS();
$lookupPerson = new PersonPics($name);
$images = $lookupPerson->getImages();

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

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

请注意变量名称中"s"大小写的变化。

用以下代码替换您的 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;
}
}

最新更新