John Doe
Продвинутый
Дата регистрации:
14.01.2019 19:23:31
Сообщений: 42
3_07_01
<?php
class Point
{
private $x;
private $y;
private static $counter = 0;
public function __construct($x = false, $y = false)
{
if ($x) {
$this->x = $x;
}
if ($y) {
$this->y = $y;
}
self::$counter++;
}
public function getX()
{
return $this->x;
}
public function getY()
{
return $this->y;
}
public function setX($x)
{
$this->x = $x;
}
public function setY($y)
{
$this->y = $y;
}
public static function getCounter()
{
return self::$counter;
}
public function __toString()
{
if ($this->x && $this->y) {
$str = "Точка с координатами ($this->x, $this->y)";
return $str;
}
return 'Координаты не заданы';
}
}
$obj_1 = new Point();
$obj_2 = new Point(5,3);
$obj_3 = new Point(4,54);
echo $obj_1 . '<br>', $obj_2 . '<br>', $obj_3 . '<br>';
John Doe
Продвинутый
Дата регистрации:
14.01.2019 19:23:31
Сообщений: 42
3_07_02
class Point
{
private $x;
private $y;
...
public function __get($name)
{
if ($name == 'z' ) {
echo 'Класс Point работает только в двумерном пространстве';
} else {
echo 'Свойства: ' . $name . ' не существует';
}
}
}
$obj_1 = new Point();
$obj_1->z;
John Doe
Продвинутый
Дата регистрации:
14.01.2019 19:23:31
Сообщений: 42
3_07_03
class Point
{
private $x;
private $y;
...
public function __set($name, $value)
{
if ($name == 'z' ) {
echo 'Класс Point работает только в двумерном пространстве';
} else {
echo "Вы пытались изменить значение несуществующего свойства $name на $value";
}
}
}
$obj_1 = new Point();
$obj_1->z = 10;
John Doe
Продвинутый
Дата регистрации:
14.01.2019 19:23:31
Сообщений: 42
3_07_04
class Point
{
private $x;
private $y;
...
public function __call($method, $params)
{
echo 'Класс Point работает только в двумерном пространстве <br>';
echo 'Введенные параметры: ' . print_r($params, true);
}
}
$obj_1 = new Point();
$obj_1->getZ('asddsa', 123);
John Doe
Продвинутый
Дата регистрации:
14.01.2019 19:23:31
Сообщений: 42
3_07_05
class Point
{
// ...
}
$obj = new Point(7, 7);
$cloneObj = clone $obj;
echo 'x у $obj = ' . $obj->getX(). '<br>';
echo 'x у $cloneObj = ' . $cloneObj->getX(). '<br>';
$obj->setX(11);
echo 'x у $obj = ' . $obj->getX(). '<br>';
echo 'x у $cloneObj = ' . $cloneObj->getX(). '<br>';
$cloneObj->setX(5);
echo 'x у $obj = ' . $obj->getX(). '<br>';
echo 'x у $cloneObj = ' . $cloneObj->getX(). '<br>';
Результат:
x у $obj = 7
x у $cloneObj = 7
x у $obj = 11
x у $cloneObj = 7
x у $obj = 11
x у $cloneObj = 5
John Doe
Продвинутый
Дата регистрации:
14.01.2019 19:23:31
Сообщений: 42
3_08
index.php :
<?php
// Подключаем класс и функции
require 'Point.php';
require 'functions.php';
// Задаем значения переменных по умолчанию
$x = '';
$y = '';
$errors = null;
$success = null;
if ($_POST) {
// Задаем имя файла
$file = 'obj';
// Если нажата кнопка "Сохранить"
if (isset($_POST['save'])) {
// получаем ошибки
$errors = getXYErrors($_POST['x'], $_POST['y']);
// задаем значение поля X, если непустое
if ($_POST['x']) {
$x = $_POST['x'];
}
// задаем значение поля Y, если непустое
if ($_POST['y']) {
$y = $_POST['y'];
}
// если нет ошибок, то
if (!isset($errors)) {
// создаем объект класса Point с
// полученными переменными
$point = new Point($x, $y);
// сериализуем его
$str = serialize($point);
// сохраняем в файл
file_put_contents($file, $str);
// записываем оповещение
$success = 'Успешно сохранено';
// "опустошаем" X и Y
$x = '';
$y = '';
}
}
// Если нажата кнопка "Загрузить"
if (isset($_POST['load'])) {
// если существует файл
if (is_file($file)) {
// записываем содержимое файла в переменную
$str = file_get_contents($file);
// "рассериализовываем"
$p = unserialize($str);
// получаем значения координат для подстановки
// в поля
$x = $p->getX();
$y = $p->getY();
// записываем оповещение
$success = 'Успешно загружено';
} else {
// если файл не существует, выводим ошибку
$errors[] = 'Файл не существует';
}
}
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<?php if (isset($errors)):?>
<?php foreach ($errors as $error): ?>
<p style="color: red"><?= $error ?></p>
<?php endforeach ?>
<?php endif ?>
<?php if (isset($success)):?>
<p style="color: green"><?= $success ?></p>
<?php endif ?>
<form action="" method="post">
<div>
X: <input type="text" name="x" value="<?= $x ?>">
</div>
<div>
Y: <input type="text" name="y" value="<?= $y ?>">
</div>
<div>
<input type="submit" name="save" value="Сохранить">
<input type="submit" name="load" value="Загрузить">
</div>
</form>
</body>
</html>
Point.php :
<?php
class Point
{
private $x;
private $y;
private static $counter = 0;
public function __construct($x = false, $y = false)
{
if ($x) {
$this->x = $x;
}
if ($y) {
$this->y = $y;
}
self::$counter++;
}
public function getX()
{
return $this->x;
}
public function getY()
{
return $this->y;
}
public function setX($x)
{
$this->x = $x;
}
public function setY($y)
{
$this->y = $y;
}
public static function getCounter()
{
return self::$counter;
}
public function __toString()
{
if ($this->x && $this->y) {
$str = "Точка с координатами ($this->x, $this->y)";
return $str;
}
return 'Координаты не заданы';
}
public function __get($name)
{
if ($name == 'z' ) {
echo 'Класс Point работает только в двумерном пространстве';
} else {
echo 'Свойства: ' . $name . ' не существует';
}
}
public function __set($name, $value)
{
if ($name == 'z' ) {
echo 'Класс Point работает только в двумерном пространстве';
} else {
echo "Вы пытались изменить значение несуществующего свойства $name на $value";
}
}
public function __call($method, $params)
{
echo 'Класс Point работает только в двумерном пространстве <br>';
echo 'Введенные параметры: ' . print_r($params, true);
}
}
functions.php :
<?php
function getXYErrors($x, $y)
{
$errors = [];
if (!empty($x)) {
if (!is_numeric($x)) {
$errors[] = 'X должен быть числом';
}
} else {
$errors[] = 'Введите координату X';
}
if (!empty($y)) {
if (!is_numeric($y)) {
$errors[] = 'Y должен быть числом';
}
} else {
$errors[] = 'Введите координату Y';
}
if (empty($errors)) {
$errors = null;
}
return $errors;
}
John Doe
Продвинутый
Дата регистрации:
14.01.2019 19:23:31
Сообщений: 42
03_09
<?php
abstract class Shape
{
public abstract function draw();
}
class Point extends Shape
{
public $x;
public $y;
public function __construct($x = false, $y = false)
{
$this->x = $x;
$this->y = $y;
}
public function draw()
{
echo "Рисуем точку с координатами ($this->x, $this->y)";
}
}
$point = new Point(1, 2);
$point->draw();
John Doe
Продвинутый
Дата регистрации:
14.01.2019 19:23:31
Сообщений: 42
03_10
<?php
interface CanMove
{
public function move();
}
interface CanFly
{
public function fly();
}
class Car implements CanMove
{
public function move()
{
echo 'Движение автомобиля <br>';
}
}
class Aircraft implements CanFly
{
public function fly()
{
echo 'Полёт самолёта <br>';
}
}
$car = new Car();
$car->move();
$aircraft = new Aircraft();
$aircraft->fly();
John Doe
Продвинутый
Дата регистрации:
14.01.2019 19:23:31
Сообщений: 42
03_11
<?php
trait CanMove
{
public function move()
{
echo 'Движение автомобиля <br>';
}
}
trait CanFly
{
public function fly()
{
echo 'Полёт самолёта <br>';
}
}
class Car
{
use CanMove;
}
class Aircraft
{
use CanFly;
}
$car = new Car();
$car->move();
$aircraft = new Aircraft();
$aircraft->fly();
John Doe
Продвинутый
Дата регистрации:
14.01.2019 19:23:31
Сообщений: 42
03_12
CanMove.php
<?php
namespace JD\Traits;
trait CanMove
{
public function move()
{
echo 'Движение автомобиля <br>';
}
}
CanFly.php
<?php
namespace JD\Traits;
trait CanFly
{
public function fly()
{
echo 'Полёт самолёта <br>';
}
}
Car.php
<?php
namespace JD\Classes;
use JD\Traits\CanMove;
require_once 'CanMove.php';
class Car
{
use CanMove;
}