Repository navigation
Expand file tree
/
Copy pathdemo.php
More file actions
173 lines (138 loc) · 5.77 KB
/
Copy pathdemo.php
File metadata and controls
173 lines (138 loc) · 5.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?php
/**
* Демонстрация работы класса Apple
*
* Этот файл демонстрирует все возможности класса Apple
* в соответствии с требованиями задания
*/
require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/common/config/bootstrap.php';
$config = yii\helpers\ArrayHelper::merge(
require __DIR__ . '/common/config/main.php',
require __DIR__ . '/common/config/main-local.php'
);
new yii\console\Application($config);
use common\models\Apple;
echo "========================================\n";
echo "Демонстрация класса Apple\n";
echo "========================================\n\n";
// Пример из задания
echo "=== Пример из задания ===\n\n";
echo "// Создание яблока\n";
echo "\$apple = Apple::createRandomApple();\n";
$apple = Apple::createRandomApple();
// Устанавливаем зеленый цвет для примера
$apple->color = 'green';
$apple->save();
echo "\necho \$apple->color; // " . $apple->color . "\n";
echo "\n// Попытка съесть яблоко на дереве\n";
echo "\$apple->eat(50);\n";
try {
$apple->eat(50);
} catch (\Exception $e) {
echo "❌ Exception: " . $e->getMessage() . "\n";
}
echo "\necho \$apple->getSize(); // " . $apple->getSize() . "\n";
echo "\n// Яблоко падает на землю\n";
echo "\$apple->fallToGround();\n";
$apple->fallToGround();
echo "✅ Яблоко упало на землю\n";
echo "\n// Откусить четверть яблока\n";
echo "\$apple->eat(25);\n";
$apple->eat(25);
echo "✅ Откушено 25% яблока\n";
echo "\necho \$apple->getSize(); // " . $apple->getSize() . "\n";
echo "\n========================================\n";
echo "Дополнительные примеры\n";
echo "========================================\n\n";
// Создание нескольких яблок
echo "=== Создание яблок разных цветов ===\n\n";
$apples = [];
foreach (['red', 'green', 'yellow'] as $color) {
$newApple = Apple::createRandomApple();
$newApple->color = $color;
$newApple->save();
$apples[] = $newApple;
$emoji = $color === 'green' ? '🍏' : ($color === 'red' ? '🍎' : '🍋');
echo "$emoji Создано {$color} яблоко (ID: {$newApple->id})\n";
}
echo "\n=== Тест состояний ===\n\n";
// Яблоко на дереве
$treeApple = Apple::createRandomApple();
echo "1️⃣ Яблоко на дереве (ID: {$treeApple->id})\n";
echo " Статус: {$treeApple->getStatusLabel()}\n";
echo " Размер: {$treeApple->getSize()}\n";
// Упавшее яблоко
$fallenApple = Apple::createRandomApple();
$fallenApple->fallToGround();
echo "\n2️⃣ Упавшее яблоко (ID: {$fallenApple->id})\n";
echo " Статус: {$fallenApple->getStatusLabel()}\n";
echo " Размер: {$fallenApple->getSize()}\n";
// Гнилое яблоко (симулируем старое падение)
$rottenApple = Apple::createRandomApple();
$rottenApple->fallToGround();
$rottenApple->fell_at = time() - (6 * 3600); // 6 часов назад
$rottenApple->save(false);
$rottenApple->updateRottenStatus();
$rottenApple->refresh();
echo "\n3️⃣ Гнилое яблоко (ID: {$rottenApple->id})\n";
echo " Статус: {$rottenApple->getStatusLabel()}\n";
echo " Размер: {$rottenApple->getSize()}\n";
// Попытка съесть гнилое яблоко
echo "\n// Попытка съесть гнилое яблоко\n";
echo "\$rottenApple->eat(10);\n";
try {
$rottenApple->eat(10);
} catch (\Exception $e) {
echo "❌ Exception: " . $e->getMessage() . "\n";
}
echo "\n=== Постепенное поедание яблока ===\n\n";
$eatApple = Apple::createRandomApple();
$eatApple->fallToGround();
echo "Яблоко упало. Начинаем есть...\n\n";
$bites = [20, 30, 25, 25]; // 100% в сумме
foreach ($bites as $i => $percent) {
$bite_num = $i + 1;
echo "Откус #{$bite_num}: {$percent}%\n";
try {
$eatApple->eat($percent);
$eatApple->refresh();
if ($eatApple->eaten_percent < 100) {
echo " ✅ Съедено всего: {$eatApple->eaten_percent}%, осталось размер: {$eatApple->getSize()}\n";
} else {
echo " ✅ Яблоко съедено полностью и удалено из БД\n";
}
} catch (\Exception $e) {
echo " ❌ Ошибка: " . $e->getMessage() . "\n";
}
}
echo "\n=== Проверка валидации ===\n\n";
$validApple = Apple::createRandomApple();
$validApple->fallToGround();
echo "1. Попытка съесть отрицательный процент:\n";
try {
$validApple->eat(-10);
} catch (\Exception $e) {
echo " ❌ Exception: " . $e->getMessage() . "\n";
}
echo "\n2. Попытка съесть больше 100%:\n";
try {
$validApple->eat(150);
} catch (\Exception $e) {
echo " ❌ Exception: " . $e->getMessage() . "\n";
}
echo "\n3. Попытка съесть больше, чем осталось:\n";
$validApple->eat(60);
echo " ✅ Съедено 60%\n";
try {
$validApple->eat(50); // Осталось только 40%
} catch (\Exception $e) {
echo " ❌ Exception: " . $e->getMessage() . "\n";
}
echo "\n========================================\n";
echo "Демонстрация завершена!\n";
echo "========================================\n\n";
echo "Всего яблок в БД: " . Apple::find()->count() . "\n";
echo "\nДля просмотра всех яблок запустите веб-приложение:\n";
echo " php yii serve --docroot=@backend/web --port=8080\n";
echo " http://localhost:8080\n\n";