Азаматикон
Новичок
Здравствуйте, изучая ООП в PHP столкнулся с проблемой. Был написан абстрактный класс по загрузке файлов на сайт и два дочерних класса по загрузке текстового файла и загрузке изображения. Всё прекрасно работает. Поставили задачу переделать методы загрузки в статические, чтобы не создавать объекты. Я перевел все в статитеский вид. Но теперь у меня перестали передаваться переменные $dir и $mime_types из дочерних классов uploadText и uploadImage в класс upload. Вопрос: Как подцепить эти переменные?(каждый класс у меня в отдельном файле). Когда методы и переменные не были статическими, все было хорошо. Вот код родителя:
Вот код класса uploadImage (аналогично построен класс uploadText):
Вот код обработчик:
В итоге вижу сообщения, что файлы успешно загружены, но в папках их нет, потому что $dir не подхватилась и названия файлов выглядят как: " /text.txt" и " /image.png";
PHP:
<?php
abstract class Upload {
protected static $dir;
protected static $mime_types;
public static function uploadFile($file){
if (!self::isSecurity($file)) return false;
$uploadfile = $dir."/".$file["name"];
echo $uploadfile."<br />";
echo $dir."<br />";
return move_uploaded_file($file["tmp_name"], $uploadfile);
}
protected static function isSecurity($file){
$blacklist = array(".php", ".phtml", ".php3", ".php4", ".html", ".htm");
foreach ($blacklist as $item){
if(preg_match("/$item\$/i", $file["name"])) return false;
}
$type = $file["type"];
for($i = 0; $i < count($mime_types); $i++){
if($type == $mime_types[$i]) break;
if($i + 1 == count($mime_types)) return false;
}
$size = $file["size"];
if ($size > 2048000) return false;
return true;
}
}
?>
PHP:
<?php
require_once "upload_class.php";
class UploadImage extends Upload {
protected static $dir = "images";
protected static $mime_types = array("image/jpeg", "image/png", "image/gif");
}
?>
PHP:
<?php
require_once "lib/uploadtext_class.php";
require_once "lib/uploadimage_class.php";
if($_POST["upload"]){
$success_text = UploadText::uploadFile($_FILES["text"]);
$success_image = UploadImage::uploadFile($_FILES["image"]);
}
?>
<html>
<head>
<title>Загрузка файлов</title>
<?php
if ($_POST["upload"]) {
if ($success_text) echo "Текст загружен!";
else echo "Ошибка при загрузке текста!";
if ($success_image) echo "Изображение загружено!";
else echo "Ошибка при загрузке изображения!";
}
?>
</head>
<body>
<h1>Загрузка файлов</h1>
<form name="my_form" action="" method="post" enctype="multipart/form-data">
<table>
<tr>
<td>Изображение:</td>
<td>
<input type="file" name="image" />
</td>
</tr>
<tr>
<td>Текст:</td>
<td>
<input type="file" name="text" />
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="upload" value="Загрузить файлы" />
</td>
</tr>
</table>
</form>
</body>
</html>