服务器PHP版本为5.3.0
我正在使用David Powers的一系列教程'书,PHP解决方案,第三版。它们处理文件上传(在本例中为图像)和图像上传时的缩略图创建。
这需要使用三个类:
Upload.php
- 处理文件上传
Thumbnail.php
- 这会创建图片缩略图
ThumbnailUpload.php
- 这会延长Upload.php
并需要Thumbnail.php
。当上传主图像时,它与其他两个类一起用于创建缩略图图像。它还添加了在创建缩略图后保留或删除原始图像的选项,以及为生成的缩略图文件名添加后缀的选项(我现在使用的这些功能都没有,但我可以在其他地方使用它们)申请稍后)。
如下面的代码所示,ThumbnailUpload.php
扩展了Upload.php
,并且还需要Thumbnail.php
类。由于ThumbnailUpload.php
是upload_page.php
页面中调用的内容,因此Thumbnail.php
似乎不在循环中,因为我努力更改$maxSize
受保护的属性它失败了。经过充分测试后,很明显Thumbnail.php
没有获得新值。
我已阅读有关反思的内容,也许这是允许我访问$maxSize
中的Thumbnail.php
属性的方法,但文档对于像我这样的新手来说没有足够的意义。
我希望能够为传递给$maxSize
的{{1}}获取新值,而根本不知道如何。
相关代码:upload_page.php
Thumbnail.php
注1: 这会设置受保护的属性' $ max'在Upload.php中,以便可以根据需要更改以字节为单位的最大文件大小
注2: 这是为了更改受保护的属性' $ maxSize'在Thumbnail.php中,除了这会抛出一个php错误,说明在ThumbnailUpload.php中这个公共函数是未定义的,因为它实际上在Thumbnail.php中。所以我将公共函数添加到ThumbnailUpload.php并且错误消失但Thumbnail.php中的$ maxSize保持不变
相关代码:ThumbnailUpload.php
// max file size for images
$max = 1048576;
// max long side dimension in pixels
$maxSize = 150;
// upload pics and create thumbnails
require_once('ClassFiles/Image/ThumbnailUpload.php');
$loader = new ThumbnailUpload('../images/projects/project_1/');
$loader->setThumbDestination('../images/projects/project_1/gallery_1/thumbnails/');
$loader->setMaxSize($max); // see note 1 below
$loader->setThumbSize($maxSize); // see note 2 below
$loader->upload();
$errors = $loader->getMessages();
$names = $loader->getFilenames();
相关代码:Thumbnail.php
namespace ClassFiles\Image;
use ClassFiles\File\Upload;
require_once __DIR__ . '/../File/Upload.php';
require_once 'Thumbnail.php';
class ThumbnailUpload extends Upload {
protected $thumbDestination;
protected $deleteOriginal;
protected $suffix = '_thb?'; // omit special characters to switch this on
public function setThumbSize($thumbSize) {
if (is_numeric($thumbSize) && $thumbSize > 0) {
$this->maxSize = (int) $thumbSize;
}
}
答案 0 :(得分:0)
不确定,如果我的问题正确......
<?php
class Thumbnail {
protected $maxSize = 100;
public function setMaxSize($size) {
$this->maxSize = $size;
}
}
class Upload {
}
class ThumbnailUpload extends Upload {
protected $thumbnail;
public function __construct(Thumbnail $thumbnail) {
$this->thumbnail = $thumbnail;
}
public function upload() {
// not possible, as maxSize is only accessible from Thumbnail an
// all of it's child classes
$this->thumbnail->maxSize = 200;
// that works, as setMaxSize is public
$this->thumbnail->setMaxSize(200);
}
}
如果setMaxSize
也受到保护,则无法从ThumbnailUpload
更改setMaxSize
。在这种情况下,类作者不希望任何人都可以更改此值。如果您是作者,则可以更改class Thumbnail {
public function __construct($maxSize = 100)
{
$this->maxSize = $maxSize
}
}
的可见性或向Thumbnail添加新的构造函数参数
num