Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 158 additions & 0 deletions 1-4. index.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
<?php
/*
1. Придумать класс, который описывает любую сущность из предметной области интернет-магазинов: продукт, ценник, посылка и т.п.
2. Описать свойства класса из п.1 (состояние).
3. Описать поведение класса из п.1 (методы).
4. Придумать наследников класса из п.1. Чем они будут отличаться?
*/

// Объявление класса
class prods{
// Объявление частной переменной
private $prods = [];
// а так просто
function __construct(){
}
// Тоже так просто
function __get($property){
return "Property: {$property} is not found!";
}
// Публичная функция получения массива - примитивная имитация запроса в БД
function getProdsDB(){
// Иммитируем запрос в базу
$arr_prods = [];
// Запрашиваем скрипт (а там у нас массив с именем $arr_prods)
require './arr_products.php';
// Возвращаем массив
return $arr_prods;
}
// Функция получения массива товаров
function getProds(){
return $this -> getProdsDB();
}
}

// объявление get_discount_prods - расширенного класса prods
class get_discount_prods extends prods{
private $prods = [];
// Массив со скидками
private $discounts = [
'vinyl' => 25,
'leather' => 15
];
// при создании класса, массив $this -> prods получает данные с БД с товарами всеми
function __construct(){
$this -> prods = $this -> getProdsDB();
}
// Получаем товары
// реализация 2, т.е. собирает Html и отдаём его в случае успеха,
// если успеха нет то ошибку
// если ошибки нет и html то код возвратим
function getProds(){
if(empty($this -> prods)) return [false, '<p>В данный момент товары отсутствуют напрочь!</p>', 'code' => 'empty'];
elseif(empty($this -> discounts)) return [false, '<p>В данный момент скидок на товары нет!</p>', 'code' => 'empty'];
else{
$html = '<table>';
$has = false;
foreach($this -> prods as $arr_item){
// При работе с базой перебора прямого бы не было
if(!empty($this -> discounts[$arr_item['prod_matter']]) && !empty($arr_item['prod_count'])){
$prod_price = (float)$arr_item['prod_price'] - ((float)$arr_item['prod_price'] / 100 * (float)$this -> discounts[$arr_item['prod_matter']]);
$has = true;
$html .= '<td>' .$arr_item['prod_id'] . "</td><td>" . $arr_item['prod_name'] . "</td><td style='text-align: right;'>" . number_format($prod_price, 2, ',', ' ') . ' ' . '<i style="text-decoration: line-through;">' . $arr_item['prod_price'] . '</i>' . "</td></tr>";
}
}
$html .= '</table>';
if(!$has) return [false, '<p>В данный момент товары со скидкой отсутствуют!</p>', 'code' => 'empty'];
}
return [true, 'html' => $html];
}
}

// Распродажа залежавшегося товара
class get_sale_prods extends prods{
// Сколько минимум должно быть, чтоб учавствовать в распродаже
private $sale = 5;
private $discount = 50;
// Распродажа товаров,
function getProdsDB(){
// Иммитируем запрос в базу
$arr_prods = [];
require './arr_products.php';
if(empty($arr_prods)) return [false, 'В данный момент товары отсутствуют напрочь!', 'code' => 'empty'];
foreach($arr_prods as $_id => $arr_item){
if(!empty($arr_item['prod_count']) && $arr_item['prod_count'] <= $this -> sale) unset($arr_prods[$_id]);
}
if(empty($arr_prods)) return [false, 'В данный момент скидок на товары нет!', 'code' => 'empty'];
return [true, 'arr' => $arr_prods];
}
function get_discount(){
return $this -> discount;
}
function getProds(){
return $this -> getProdsDB();
}
}


$prods = new prods();
// echo $prods -> x;
// var_dump($prods -> getProds());


$prods = $prods -> getProds();
if(empty($prods)){
echo "<p>В данный момент товары отсутствуют!</p>";
}
else{
echo "<table style='/*width: 100%*/'><tr><td>iD</td><td>Naim</td><td>Price</td></tr>";
foreach($prods as $arr_item){
echo "<tr><td>" . $arr_item['prod_id'] . "</td><td>" . $arr_item['prod_name'] . "</td><td style='text-align: right;'>" . number_format($arr_item['prod_price'], 2, ',', ' ') . "</td></tr>";
}
echo "</table>";
}

$prods = new get_discount_prods();
$__r = $prods -> getProds();

echo "<hr>Товары со скидкой:<hr>";

if(!$__r[0] && !empty($__r['code'])){
echo $__r[1];
}
elseif(!$__r[0]){
echo '<p>Error: ' . $__r[1] . '</p>';
}
else{
echo $__r['html'];
}

$prods = new get_sale_prods();
$__r = $prods -> getProds();

$discount = $prods -> get_discount();

if($discount <= 0){
echo "<p>В данный момент распродажи нет!</p>";
}
else{
echo "<hr>Распродажа:<hr>";
if(!$__r[0] && !empty($__r['code'])){
echo $__r[1];
}
elseif(!$__r[0]){
echo '<p>Error: ' . $__r[1] . '</p>';
}
else{
echo "<table style='/*width: 100%*/'><tr><td>iD</td><td>Naim</td><td>Price</td></tr>";
foreach($__r['arr'] as $arr_item){
$prod_price = (float)$arr_item['prod_price'] - ((float)$arr_item['prod_price'] / 100 * $discount);
echo "<tr><td>" . $arr_item['prod_id'] . "</td><td>" . $arr_item['prod_name'] . "</td><td style='text-align: right;'>" . number_format($prod_price, 2, ',', ' ') . ' <i style="text-decoration: line-through;">' . $arr_item['prod_price'] . '</i></td></tr>';
}
echo "</table>";
}
}



?>
80 changes: 80 additions & 0 deletions 5-7. index.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<?php
// �������� ������� ���������, ����������� ��� ���� ���� �������� ������� ������� � 1 �������
namespace p1;
// ���������� ������
class A {
// ���������� ��������� �������
public function foo() {
// ����������� ����������� ����������
static $x = 0;
// ��������� ���������� ($x = $x + 1) � ����� � �� �����
echo ++$x;
}
}

echo "p1: ";
// �������� ������
$a1 = new A();
// �������� ������
$a2 = new A();
// ����� �������
$a1->foo(); // ������� 1
// ����� �������
$a2->foo(); // ������� 2
// ����� �������
$a1->foo(); // ������� 3
// ����� �������
$a2->foo(); // ������� 4

/*
* ��� ���������� ������, ��� ���������� static ��� �������� ������� � ������� ����������� ������ 1 ���, � ��� ��������� ������ ������� ������������� ����� ��� ��� ��� ���� ������� � ���������� ������� ��������
*/

// �������� ������� ���������, ����������� ��� ���� ���� �������� ������� ������� � 1 �������
namespace p2;

class A {
public function foo() {
static $x = 0;
echo ++$x;
}
}
// �������� ������� ������, ������������ ����� A
class B extends A {
}
echo "<br>p2: ";
$a1 = new \p2\A();
$b1 = new \p2\B();
$a1->foo(); // ������� 1
$b1->foo(); // ������� 1
$a1->foo(); // ������� 2
$b1->foo(); // ������� 2

/*
* ��� ���������� ������, ��� �������� 2 ������ ������, ��� ������ ������� ����������, ����� � � ����� �, ���������� static � ������� ���� � �� ����� "�����" ������ ��� ������� � ���������������� ���� ������ � ��� ������.
*/


namespace p3;

class A {
// function __construct($a, $c){;}
public function foo() {
static $x = 0;
echo ++$x;
}
}
class B extends A {
}
echo "<br>p3: ";
$a1 = new A;
$b1 = new B;
$a1->foo(); // ������� 1
$b1->foo(); // ������� 1
$a1->foo(); // ������� 2
$b1->foo(); // ������� 2

/*
* ��������� ���������� ����� ��� � namespace p2, ������ �� ����������, �� ����������� ���������� ������ � �������, ���� �� � ��� ��� __construct � �������� �����������, ���� �� ��������� ������, � �.�. � ���, ����� ������� ����� ��� ������. ���������������� __construct � �������.
*/
?>
60 changes: 60 additions & 0 deletions arr_products.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<?php
$arr_prods = [
[
'prod_id' => 1,
'prod_name' => 'Мини юбка, латекс',
'prod_price' => 1500,
'prod_desc' => 'Подчеркнёт Вашу фигуру, все будут в ударе',
'prod_matter' => 'latex',
'prod_count' => 5,
],
[
'prod_id' => 2,
'prod_name' => 'Мини юбка, кожа',
'prod_price' => 1800,
'prod_desc' => 'Красиво будет сидеть на Вашей фигуру, Вам понравится',
'prod_matter' => 'leather',
'prod_count' => 7,
],
[
'prod_id' => 3,
'prod_name' => 'Атласные перчатки',
'prod_price' => 900,
'prod_desc' => 'Подчеркнёт изящество Ваших рук',
'prod_matter' => 'satin',
'prod_count' => 5,
],
[
'prod_id' => 4,
'prod_name' => 'Виниловое платье',
'prod_price' => 1800,
'prod_desc' => 'Подчеркнёт изящество Ваших рук',
'prod_matter' => 'vinyl',
'prod_count' => 8,
],
[
'prod_id' => 5,
'prod_name' => 'Виниловая юбка карандаш',
'prod_price' => 900,
'prod_desc' => 'Подчеркнёт изящество Ваших рук',
'prod_matter' => 'vinyl',
'prod_count' => 0,
],
[
'prod_id' => 6,
'prod_name' => 'Чулки из искусственной кожи',
'prod_price' => 1100,
'prod_desc' => 'Подчеркнёт изящество Ваших рук',
'prod_matter' => 'leather',
'prod_count' => 3,
],
[
'prod_id' => 7,
'prod_name' => 'Кожанный комбинизен',
'prod_price' => 1100,
'prod_desc' => 'Подчеркнёт изящество Ваших рук',
'prod_matter' => 'leather',
'prod_count' => 4,
],
];
?>