2017-04-30 38 views
0

服務器PHP版本5.3.0改變/在其他類中設置保護財產 - PHP

我用了一系列的大衛力量的書,PHP解決方案,第三版教程的工作。他們處理文件上傳(在這種情況下,圖像)和縮略圖創建上傳圖像。

這需要使用三類:

Upload.php - 此處理文件上傳

Thumbnail.php - 這將創建縮略圖

ThumbnailUpload.php - 這擴展Upload.php,需要Thumbnail.php。它與其他兩個類一起工作,在主圖像上傳時創建縮略圖。它還添加了在縮略圖創建後保留或刪除原始圖像的選項,以及爲生成的縮略圖文件名添加後綴的選項(我現在使用的這些功能都不具備,但我可能稍後會在其他應用程序中使用它們)。

如下面的代碼所示,ThumbnailUpload.php延伸Upload.php並且還需要Thumbnail.php類。由於ThumbnailUpload.phpupload_page.php頁面中所謂的,因此我認爲Thumbnail.php不在該循環中,因爲我努力更改其中的受保護屬性失敗。經過足夠的測試後,很明顯Thumbnail.php沒有獲得新的價值。

我已閱讀關於Reflection的內容,也許這是允許我訪問Thumbnail.php中的$maxSize屬性的方式,但文檔對於像我這樣的新手來說沒有足夠的意義。

我想能夠獲得$maxSize的新值傳遞給Thumbnail.php,根本不知道如何。

相關代碼:upload_page.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(); 

注1: 這臺受保護財產「$最大」的upload.php的,以便需要時

以字節爲單位的最大文件大小是可以改變的

注2: 這是在Thumbnail.php改變保護財產「$最大範圍」只是,這將引發一個PHP錯誤,說這個公共函數在ThumbnailUpload.php不確定,因爲它實際上是在Thumbnail.php。因此,我增加了公共功能ThumbnailUpload.php和錯誤消失,但是$最大範圍的Thumbnail.php保持不變

相關代碼:ThumbnailUpload.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; 
    } 
} 

相關代碼:Thumbnail.php

namespace ClassFiles\Image; 

class Thumbnail { 
protected $original; 
protected $originalwidth; 
protected $originalheight; 
protected $basename; 
protected $thumbwidth; 
protected $thumbheight; 
protected $maxSize = 100; // max long-side dimension in pixels 
protected $canProcess = false; 
protected $imageType; 
protected $destination; 
protected $suffix = '_thb?'; // omit special characters to switch this on 
protected $messages = array(); 

public function setThumbSize($thumbSize) { 
    if (is_numeric($thumbSize) && $thumbSize > 0) { 
     $this->maxSize = (int) $thumbSize; 
    } 
} 
+0

有些人喜歡downvote時實在是太羅嗦了。用實際的相關代碼編輯你的問題可能會更好。 – Mikey

+0

@Mikey它需要一段時間來削減這一點。代碼不是問題,當同一過程能夠訪問另一個類時,無法使用setter方法訪問一個類文件。 – mileaminute

+0

很誠實,從頭開始閱讀你的問題,就好像是第一次。這幾乎是不可理解的。不要繼續添加更新,並且絕對不要按照時間順序相反的順序添加它們。將任何人的問題都保存爲一個連貫的問題。必要時重寫。另請參閱https://meta.stackoverflow.com/a/253230/476。 – deceze

回答

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 
    } 

} 
+0

謝謝你。 ThumbnailUpload.php擴展Upload.php我無法在Thumbnail.php中獲取受保護的屬性'$ maxSize'來更改。不過,我可以在Upload.php中更改受保護的屬性'$ max'。就好像縮略圖無法被任何嘗試改變'$ maxSize'。 – mileaminute