Передача переменной в статическом классе

Азаматикон

Новичок
Здравствуйте, изучая ООП в PHP столкнулся с проблемой. Был написан абстрактный класс по загрузке файлов на сайт и два дочерних класса по загрузке текстового файла и загрузке изображения. Всё прекрасно работает. Поставили задачу переделать методы загрузки в статические, чтобы не создавать объекты. Я перевел все в статитеский вид. Но теперь у меня перестали передаваться переменные $dir и $mime_types из дочерних классов uploadText и uploadImage в класс upload. Вопрос: Как подцепить эти переменные?(каждый класс у меня в отдельном файле). Когда методы и переменные не были статическими, все было хорошо. Вот код родителя:
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;
        }
    }
?>
Вот код класса uploadImage (аналогично построен класс uploadText):
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>
В итоге вижу сообщения, что файлы успешно загружены, но в папках их нет, потому что $dir не подхватилась и названия файлов выглядят как: " /text.txt" и " /image.png";
 

Азаматикон

Новичок
Всем спасибо! Разобрался. Вместо self:: нужно писать static:: при обращении к переопределяемым переменным. Видимо self:: обращается только к своим переменным которые по умолчанию пустые и игнорирует новые из дочернего класса.
 
Сверху