<?php $names=['петя','вася']; ?>
<?php if ($names): ?>
<ul>
<?php foreach ($names as $name): ?>
<li>
<div class = "avatar">
<img src="images/user.png">
</div>
</li>
<h2><?=$name?></h2>
<p>Привет!</p>
<div class = "time">09:15</div>
<?php endforeach; ?>
</ul>
<?php endif; ?>
if (!is_numeric($_GET['id']) or !is_int($_GET['id']+0))Насчет подобных проверок... поверь, я "собаку съел" на этом, писав свою библиотеку и я скажу, что на самом деле мало кто из отвечающих сразу так напишет правильный ответ =) Все существующие в PHP механизмы определения чисел, все эти фильтры и расширения для оных - крайне плохо работают.
foreach ([
'9223372036854775808', 9223372036854775808, // > PHP_INT_MAX + 1
1, '10', '+1', '1.1', 1.1, .2, 2., '.2', '2.',
'-2.', '-.2', null, [], true, false, 'string'
] as $value) {
echo $value . ':' . gettype($value) . ' is Integer? - ' . (isInteger($value) ? 'yes' : 'no') . PHP_EOL;
echo $value . ':' . gettype($value) . ' is Float? - ' . (isFloat($value) ? 'yes' : 'no') . PHP_EOL;
}
9223372036854775808:string is Integer? - yes
9223372036854775808:string is Float? - no
9.2233720368548E+18:double is Integer? - no
9.2233720368548E+18:double is Float? - yes
1:integer is Integer? - yes
1:integer is Float? - no
10:string is Integer? - yes
10:string is Float? - no
+1:string is Integer? - yes
+1:string is Float? - no
1.1:string is Integer? - no
1.1:string is Float? - yes
1.1:double is Integer? - no
1.1:double is Float? - yes
0.2:double is Integer? - no
0.2:double is Float? - yes
2:double is Integer? - no
2:double is Float? - yes
.2:string is Integer? - no
.2:string is Float? - yes
2.:string is Integer? - no
2.:string is Float? - yes
-2.:string is Integer? - no
-2.:string is Float? - yes
-.2:string is Integer? - no
-.2:string is Float? - no <---- тут только ошибка, не починил еще
:NULL is Integer? - no
:NULL is Float? - no
Array:array is Integer? - no
Array:array is Float? - no
1:boolean is Integer? - no
1:boolean is Float? - no
:boolean is Integer? - no
:boolean is Float? - no
string:string is Integer? - no
string:string is Float? - no
<?php
$url = 'http://server.ru/?var=foo&var=Привет, мир!&XSS=<script>alert(1)</script>';
$url = htmlspecialchars($url);
?>
<a href="<?=$url?>">link</a>
при выводе доски объявлений....некая сущность, назовём её Mapper, возвращает коллекцию объектов - объектов объявлений. Каждый объект == одно объявление. Объявление может иметь свойства - VIP-статус (дата конца этого статуса), типичные поля для объявления типа заголовок + текст. Далее, объявление может иметь изображения. Объект объявления имеет метод, который запрашивает у другой сущности объекты своих изображений, которые в свою очередь знают, как сформировать URl к изображению или иные характеристики изображений. Объект объявления имеет метод getPaymentSystem() - возвращается объект класса типа Kassa, он может возвратить объект Робокасса (или Frikassa), который умеет генерировать URL, который необходим для транзакции оплаты платных услуг данного объекта объявления....
я пока не понимаю как это использоватьи не поймешь без подсказок.
Для чего, в данном случае, возвращать объекты?Твой вопрос говорит о том, что ты не понимаешь разницу между объектом и массивом.
Чем мне это поможет на конкретном примере?ОК. Пример. Давай допустим, что твой объект Product не просто содержит свойства, а каждое свойство..... да - тоже является объеком. Итак, перепишем конструктор, добавим несколько свойств новых, для примера:
public function __construct(int $id, string $name, int $price, $decription, $discount_date){
$this->id = $id;
$this->name = new EntityText($name);
$this->price = new Price($price);
$this->decription = new EntityText($decription);
$this->discount_date = new MyDate($discount_date); // MyDate extends \Datetime
}
<html>
<div id="product<?=$obj->getId()?>">
<h1><?=$obj->getName()->getTextValue()?></h1>
<p>Цена: <?=$obj->getPrice()->getUSD()->asText()?></p> <!-- например, выведет "101 доллар США" (c правильной формой слова "доллар/доллара/долларов") -->
<p><?=$obj->getDescription()->getTextValue(200)?></p>
<p>Скидка действут <?=$obj->getDiscountDate()->formatAsHuman()?></p> <!-- выведет "еще 2 дня" -->
</div>
</html>
$product = new Product();
$product->setData($data); // $data - массив со значениями.
// Берем ключи каждого элемента $data, приводим к camelCase, пытаемся найти такой set-метод
// в объекте product и вызвать его с относящимся к ключу значением
print_r($product->getModelErrors()); // проверяем, насколько корректно заполнен продукт
всё началось с фразы "никакой работы с БД не должно быть в модели".это правильно и это ты правильно понял, абстрагировав слой БД от слоя модели. Советую почитать книгу Фаулера "Архитектуру корп. пр. приложений" и особенно главу "Источники данных". Без этой концепции ты дальше своей подделки не уедешь в знаниях.
Приятно иметь универсальную функцию, которая принимает аргументы разного типа.приятно девку за сиськи щупать, а озвученное выше - лишь прямой путь к говнокоду, непрозрачной архитектуре и бесславной гибели проекта.
User class // объект для "тупых" пользователей, что бы в ноги не выстреливали
ORM // трансляция в объекты
mysqli/pdo user cover // возможно, какая-то более удобная обертка над драйверами mysqli/pdo
mysqli/pdo // родные библиотеки PHP для СУБД
СУБД // база данных
файловая система и прочий АД