<?php
// базовый класс публикации
// имеет свойства для заголовка и тела
// умеет отдавать контент в простейшем виде
class Publication {
protected $_header;
protected $_body;
public function __construct($header, $body) {
$this->_header = $header;
$this->_body = $body;
}
public function getContent() {
return
'<h1>' . $this->_header . '</h1>' .
'<p>' . $this->body . '</p>';
}
}
// статья в дополнение имеет еще свойство для имени автора
// конструктор переопределен для задания имени автора
// метод getContent переопределен, чтобы дописывать под заголовком статьи имя автора
class Article extends Publication {
protected $_author;
public function __construct($header, $body, $author) {
parent::__construct($header, $body);
$this->_author = $author;
}
public function getContent() {
return
'<h1>' . $this->_header . '</h1>' .
'<br /><br/ >'.
'By ' . $this->author .
'<br /><br/ >'.
'<p>' . $this->body . '</p>';
}
}
// объявление переопределяет только метод getContent
// заворачивает вывод в блок определенного класса - так объявление заметнее
// но сам контент генерируется родительским методом
class Announcement extends Publication {
public function getContent() {
return
'<div class="announcement">' .
parent::getContent() .
'</div>';
}
}
// а вот короткая новость, например, не переопределяет метод getContent
// он ей подходит как есть
// она только с данными немного шаманит
class ShortNews extends Publication {
public function __construct($header, $body) {
$this->_body = substr($header, 0, 31);
$this->_body = substr($body, 0, 255);
}
}
// а вот и принтер
// принтер печатает публикации
// ему пофиг, какие именно - хоть короткую новость мы его попросим напечатать, хоть объявление
// он знает, что у любой публикации есть метод getContent, результат которого можно напечатать
// потому что объекты классов статья/объявление/короткая новость - они одновременно и объекты класса публикация
// это и есть полиморфизм
class PublicationPrinter {
public static function print(Publication $publication) {
print($publication->getContent());
}
}
chunk_split($number, 2, ' ');
$words1 = file('firstword.txt');
$words1MaxIndex = count($words1) - 1;
$words2 = file('secondword.txt');
$words2MaxIndex = count($words2) - 1;
$randomPhrase = $words1[mt_rand(0, $words1MaxIndex)] . ' ' . $words2[mt_rand(0, $words2MaxIndex)];
$x = ".54..76..21..34.";
preg_match_all('/\.(\d+)\./', $x, $out);
print_r($out[1]);
Array
(
[0] => 54
[1] => 76
[2] => 21
[3] => 34
)
$names = range(1, 33);
$total = count($names);
$size = 7;
for ($i = 0; $i < 500; $i++) {
if (!isset($offset) || $offset >= $total) {
$offset = 0;
}
$slice = array_slice($names, $offset, $size);
do_whatever_you_need_with_the_slice($slice);
$offset += $size;
}
function do_whatever_you_need_with_the_slice($slice) {
echo implode('|', $slice) . '<br>';
}
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
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
...
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
... и так далее
class StaticElementContainer {
protected static $_elements = array();
public static function getElements() {
return self::$_elements;
}
public function addElement($id, $arg1, $arg2, $parents = array()) {
if (empty($parents)) {
self::$_elements[$id] = self::_prepareElement(array($arg1, $arg2));
}
else {
$_elements = &self::$_elements;
while ($parents) {
$parent = array_shift($parents);
if (!isset($_elements[$parent])) {
$_elements[$parent] = self::_prepareElement();
}
$_elements = &$_elements[$parent]['sub'];
}
$_elements[$id] = self::_prepareElement(array($arg1, $arg2));
}
}
protected static function _prepareElement($main = array(), $sub = array()) {
return array(
'main' => $main,
'sub' => $sub,
);
}
}
$test = new StaticElementContainer();
$test->addElement('id_1','arg1','arg2');
$test->addElement('id_2','arg1','arg2');
$test->addElement('id_5','arg1','arg2', array('id_2','id_3','id_4'));
print_r(StaticElementContainer::getElements());
Array
(
[id_1] => Array
(
[main] => Array
(
[0] => arg1
[1] => arg2
)
[sub] => Array
(
)
)
[id_2] => Array
(
[main] => Array
(
[0] => arg1
[1] => arg2
)
[sub] => Array
(
[id_3] => Array
(
[main] => Array
(
)
[sub] => Array
(
[id_4] => Array
(
[main] => Array
(
)
[sub] => Array
(
[id_5] => Array
(
[main] => Array
(
[0] => arg1
[1] => arg2
)
[sub] => Array
(
)
)
)
)
)
)
)
)
)