2017-04-30 18 views
0

ServerのPHPのバージョンは、私はデビッド・パワーズの本、PHPソリューション、第3版ではチュートリアルのシリーズで働いている5.3.0は別のクラスで保護されたプロパティを設定/変更する - PHP

です。ファイルのアップロード(この場合は画像)とサムネイルの作成(画像のアップロード時)を処理します。

これは三つのクラスを使用する必要があります。

Upload.phpを - これは、ファイルのアップロード

Thumbnail.phpを扱う - これは、画像のサムネイル

ThumbnailUpload.phpを作成する - これがUpload.phpを拡張し、Thumbnail.phpが必要です。他の2つのクラスと連携して、メイン画像がアップロードされるときにサムネイル画像を作成します。また、サムネイルを作成した後に元の画像を保持または削除するオプションや、生成されたサムネイルのファイル名にサフィックスを追加するオプションも追加されています(これらの機能は現在使用していませんが、後で他のアプリケーションで使用できます)。

ThumbnailUpload.phpUpload.phpに拡張され、またThumbnail.phpクラスも必要です。 はupload_page.phpページで呼び出されているので、の保護されたプロパティを変更しようとする私の努力が失敗するため、Thumbnail.phpはループしていないようです。十分なテストの後、Thumbnail.phpが新しい値を得ていないことは明らかです。

私はReflectionについて読んだことがあります。これはプロパティのThumbnail.phpにアクセスできるようにする方法かもしれませんが、ドキュメントは自分のような初心者には十分理解できません。

$maxSizeの新しい値をThumbnail.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_page.php:

必要に応じてバイト単位の最大ファイルサイズを変更できるように これはUpload.phpで保護されたプロパティ「$最大」を設定し、

注2: これはThumbnail.phpの保護されたプロパティ '$ maxSize'を変更するためのものです。ただし、Thumbnail.phpに実際に存在するため、このpublic関数はThumbnailUpload.phpで定義されていないというPHPエラーが発生します。だから私はThumbnailUpload.phpにパブリック関数を追加し、エラーが表示されなくなりますがThumbnail.phpで$ maxSizeのは

関連するコード変わら: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

+0

サムネイルに新しいコンストラクタのパラメータを追加することができます。実際の関連コードで質問を編集する方がよいでしょう。 – Mikey

+0

@Mikeyこれほどまでにそれを減らすのに時間がかかりました。コードは問題ではありません。同じプロシージャが別のクラスにアクセスできる場合には、setterメソッドを使用して1つのクラスファイルにアクセスできないことがあります。 – 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の可視性を変更したり、一部の人々はそれがあまりにも長ったらしいときにdownvoteしたい

class Thumbnail { 

    public function __construct($maxSize = 100) 
    { 
     $this->maxSize = $maxSize 
    } 

} 
+0

ありがとうございました。 ThumbnailUpload.phpはUpload.phpを拡張します。変更するThumbnail.phpの保護されたプロパティ '$ maxSize'を取得できません。しかし、私はUpload.phpの保護されたプロパティ '$ max'を変更することはできます。 '$ maxSize'を変更しようとするとサムネイルにアクセスできないようです。 – mileaminute

関連する問題