romas_s
Новичок
Дата регистрации:
05.09.2017 15:36:54
Сообщений: 2
Не могу разобраться со статическими классами.
Кто разобрался поделитесь плз опытом.
Где, как и почему применяется.
почему стоит использьзовать ИМЕННО статические классы в тех или иных случаях и т д.
я понимаю что такое статические переменные, но не могу вкурить статические функции и классы.
Как только не извращался, выдаетс сообщение что данный класс не может быть объявлен как статический и куча других непонятных мне ошибок.
Поделитесь плз рабочим примером статического класса со статическим под классом.
обычный класс со статическим под классом.
код который нужно было в уроке сделать статическим:
и накидайте плз ссылок с полезной и доходчивой информацией по статическим классам.
index.php
<?php
/* Реализация с использованием статических методов
$_POST - переменная хранит данные отправленые методом POST
$_FILES - массив который хранит все характеристики отправленных файлов методом POST
require_once - подключает внешние файлы, в случает отсутствия файла - прекращается работа всех скриптов и выдается ошибка
*/
if ($_POST["upload"])
{
print_r($_FILES);
// подключаем классы
require_once("lib/uploadtext_class.php"
require_once("lib/uploadimage_class.php"
if ( $_POST["upload"] )
{
$upload_text = new UploadText();
//echo Upload::UploadText;
$upload_image = new UploadImage();
$success_text = $upload_text->uploadFile ( $_FILES["text"] );
$success_image = $upload_image->uploadFile ( $_FILES["image"] );
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>OOP загрузка файлов</title>
</head>
<body>
<h1>Загрузка файлов</h1>
<?php
if ( $_POST["upload"] )
{
if ( $success_text ) echo "Текстовый файл супешно загружен" . "<br>";
else echo "Ошибка при загрузке текстового файла";
if ( $success_image ) echo "Картинка супешно загружена" . "<br>";
else echo "Ошибка при загрузке картинки";
}
?>
<form name = "myform" action = 'https://info.za500.biz/files/php/OOP_zaklu4enie_statik/index.php' 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>
upload_class.php
<?php
/*
Реализация с использованием статических методов
abstract - создание абстрактного класса или функции
class - создание класса
protected - доступ в пределах класса и дочерних классов
public - открытый доступ
function - создание функции
$this-> - обращение к переменной в классе
move_uploaded_file (имя файла, куда загружать) - функция загрузки файлов
name
элемент массива (характеристик файла) который хранит имя загружаемого файла.
type
array - массив
foreach (массив as переменная счетчик) - цикл.
preg_match (регулярное выражение, массив) - проверка регулярного выражения
for - цикл
count - функция которая подсчитывает кол элементов массива
if - проверка условия
break - прервать цикл
size - размер файла в файтах
return - прерывание работы функции и возсрат значения
*/
class Upload
{
protected $dir; // директория
protected $mime_types; // тип загружаемых аднных
/*функция проверки файла на расширение файла*/
protected function isSecurity ($file)
{
// запрещенные типы файлов
$blacklist = array(".php", ".phtml", ".php3", ".php4", ".html", ".htm"
// цикл, который проверяет, находится ли тип загружаемого нами файла в списке запрещенных файлов.
// если загружаемый тип файла запрещен - функция прекращает свою работу и возвращает false
// $item - произвольное название переменной, которая используется для перебора элементов массива $blacklist
foreach ($blacklist as $item) { if ( preg_match( "/$item\$/i", $file["name"] ) ) return false; }
// получаем тип загружаемого файла, грубо говоря загружаемый файл рассматриваем как массив состоящий с атрибутов файла.
$type = $file ["type"];
// mime_types - масив со списком разрешенных типов файлов
// значение mime_types получаем с дочерних классов.
// count - функция которая подсчитывает кол элементов массива
for ( $i = 0; $i < count( $this->mime_types ); $i++ )
{
if ( $type == $this->mime_types[$i] ) break; // тип загружаемого файла соответствует разрешенным типам файлов
if ( $i +1 == count( $this->mime_types ) ) return false; // не нашли загружаемый тип файла в списке разрешенных, прерываем функцию и возвращаем false
}
$size = $file["size"];
if ($size > 2048000) return false; // проверка не превышает ли размер файла мах разрешенному размеру.
return true; // файл прошел проверку, разрешаем загрузку файла
}
// функция загрузки файлов на сервер
public function uploadFile ($file)
{
// проверяем соответствует ли файл требованим, если найдены не соответствия - прерываем работу функции и возвращаем false
if ( !$this->isSecurity ($file) ) return false;
// формируем полный путь загрузки файла с указанием имени файла
$uploadfile = $this->dir . "/" . $file["name"];
// move_uploaded_file - функция загрузки файлов
// tmp_name - элемент массива (характеристик файла) который хранит имя загружаемого файла.
return move_uploaded_file( $file["tmp_name"], $uploadfile );
}
}
?>
uploadimage_class.php
<?php
/*
require_once - подключаем файл с проверкой, что б файл не был подключен дважды
class - создаем класс
extends - наследование от родительского класса
protected - доступ к переменой только в пределах класса
array - массив
*/
require_once("upload_class.php"
class UploadImage extends Upload
{
protected $dir = "images";
protected $mime_types = array ( "image/png","image/jpeg","image/jpg","image/gif" );
}
?>
uploadtext_class.php
<?php
/*
require_once - подключаем файл с проверкой, что б файл не был подключен дважды
class - создаем класс
extends - наследование от родительского класса
protected - доступ к переменой только в пределах класса
array - массив
*/
require_once("upload_class.php"
class UploadText extends Upload
{
protected $dir = "text";
protected $mime_types = array("text/plain"
}
?>