Jump to content

ООП для начинающих


rus
 Share

Recommended Posts

Потихоньку изучаю ооп и решил выложить сюда то что получилось в процессе изучения, может пригодится новичкам, то есть таким же как и я в ооп <_<

Сам код с комментариями, поэтому не стал расписывать отдельно взятые куски, ибо меня лично самого это раздражает.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="keywords" content="контент">
<meta name="description" content="описание">
<title>Заголовок страницы</title>
</head>
<body>
<?php
// ТИПЫ СУЩЕСТВУЮЩИХ ДАННЫХ

//$int = 1; целое число
//$string = "Мне 29 лет"; строка
//$float = 3.14; числа с плавающей точкой, дробные числа
//$bool = false; логический тип данных (true или false)

// КЛАССЫ И ОБЪЕКТЫ
//var - обязательный параметр в классе, с его помощью объявляется переменная внутри класса
class Human {
var $arms = "2 руки";
var $legs = "2 ноги";
}
$rus = new Human ();
echo $rus->arms;
echo "<br>";
echo $rus->legs;
echo "<br>";
$rus->arms = "3 руки";
echo $rus->arms;
echo "<hr>";

class Musketter {
var $heart = "отважное сердце";
var $hand = "сильная рука";
var $sword = "шпага";
}
$atos = new Musketter ();
echo "<p><strong>Без изменений</strong></p>";
echo $atos->heart;
echo "<br>";
echo $atos->hand;
echo "<br>";
echo $atos->sword;

echo "<p><strong>С изменениями</strong></p>";
$atos->heart = "отважная душа";
$atos->sword = "дубина";

echo $atos->heart;
echo "<br>";
echo $atos->hand;
echo "<br>";
echo $atos->sword;
echo "<hr>";

// ЦЫКЛЫ FOR И WHILE
$var = "экспрессия";
$c = 0;
//этот цикл эквивалентен while
/* for($i = 0; $i <= 10; $i++) {
echo "i = ".$i." c = ".$c."<br>";
$c = $c+$i;
}*/
while($c <= 10) {
echo "$var<br>";
$c++;
}
echo "<hr>";

// МАССИВЫ
$dog = "собака";
$cat = "кошка";
$turtle = "черепаха";
$array = array('собака', 'кошка', 'черепаха'); //загоняем массив данных в переменную $array и говорим ей что она есть массив
echo $array[0]; //выводим первый элемент массива (отсчет начинается с нуля)

$pets[] = "собака";
$pets[] = "кошка";
$pets[] = "черепаха";
//смотрим содержание массива и его ключей
echo "<pre>";
print_r ($pets);
echo "</pre>";

$pets[1] = "котенок";//изменяем значение элемента массива с ключом 1
//смотрим измененное содержание массива
echo "<pre>";
print_r ($pets);
echo "</pre>";

//еще один способ образовать массив, только не с числовыми ключами, а со строковыми
$names = array(
'Филипп' => 'Киркоров',
'Алла' => 'Пугачева'
);
//выводим элемент массива по его ключу [Филипп]
/* echo $names[Филипп];
echo "<pre>";
print_r ($names);
echo "</pre>";*/

//проходимся циклом по массиву и выводим его содержание в виде: ключ->элемент с подсчетом кол-ва элементов
foreach($names as $key => $val) {
echo ++$count." элемент <br>";
echo $key." => ".$val."<br>";
}
echo "<hr>";
//ФУНКЦИИ
//в подобном виде получается много кода из-за дублирования однотипных действий, с помощью функций упрощается и уменьшается код
/* $s = 10;
for($i = 0; $i < $s; $i++) {
$sum = $sum + $i;
}
echo $sum."<br>";

$s = 8;
for($i = 0; $i < $s; $i++) {
$sum2 = $sum2 + $i;
}
echo $sum2;*/
//функция sum с фходным параметром $s который можно получить из вне функции
function sum($s) {
for($i = 0; $i <= $s; $i++) {
$sum = $sum + $i;
}
echo $sum;
}
//входной параметр может быть определен как в переменной, так и на прямую
/* $s = 10;
sum($s);*/
sum(10); //входной параметр напрямую
echo "<br>";
sum(8);
echo "<hr>";
//МЕТОДЫ
class My_method {
//Функция объявленная в теле класса - называется методом
function sum($s) {
for($i = 0; $i <= $s; $i++) {
$sum = $sum + $i;
}
//echo $sum;
return $sum; //возвращает результат цикла for во входной параметр $s функции sum()
}
function out() {
echo "длинный, длинный текст";
}
//при создании этого объекта (My_method) с именем класса, создается автоматически конструктор
//и вызывается при инициализации класса ( $obj = new My_method(); )
function My_method($var) {
echo "Привет, я конструктор (constructor) и var = ".$var;
}
//еще один способ вызвать метод конструкт
/*function __construct() {
echo "Привет, я конструктор (constructor)";
}*/
}
$obj = new My_method(10); //так объявляются объкты класса
echo "<br>";
//$obj->sum(10);
$var = $obj->sum(10);// помещаем возвращенный результат в переменную $var
echo $var."<br>";
$var = $obj->out();
echo $var;
echo "<hr>";
//НАСЛЕДОВАНИЕ
class Pipl {
var $hands = "2 руки";
var $lags = "2 ноги";
var $head = "1 голова";
function action() {
echo "Я могу ходить";
}
}
//этот класс наследует свойства класса Pipl при помощи extends
class Doctor extends Pipl {
var $knife = "нож";
}
$obj = new Doctor();
echo $obj->head."<br>";
$obj->action();
echo "<br>";

class Father {
var $muskules = "сильные мускулы";
}
class Mother extends Father {
var $eyes = "красивые глаза";
}
//этот класс должен унаследовать св-ва двух классов выше, или любого из них
class child extends Mother {
var $mind = "светлый ум";
}
$obj = new child();
echo $obj->muskules;
echo "<hr>";
//МОДИФИКАТОРЫ ДОСТУПА private, protected, public и static
class Brother {
private $big = "большой человек"; //private - используется только внутри своего класса
protected $seksi = "сексуальный"; //protected - может использоваться внутри своего класса и в наследующих его классах
public function work() { //public - можно использовать везде, как в наследующих классах, так и в объекте
echo "я умею работать";
}
}
class Sister extends Brother {
public static $hello = "привет, я статик"; //вызывается напрямую без объявления объекта типа: $obj = new Brother();
}
$obj = new Brother();
$obj->work(); //так как $work является public, то можно использовать везде
echo "<br>";
$obj1 = new Sister();
$obj1->work();
// $obj1->seksi; так будет ошибка, ибо $seksi является protected и используется только внутри класса, либо внутри в наследующих классах
echo "<br>";
echo Sister::$hello; //обращение на прямую к static без объявления объекта
?>
</body>
</html>

Edited by rus
Link to comment
Share on other sites

Про конструкторы забыл...

И вообще, способ изложения не очень удобный...

там про конструкторы есть, но не много.

Почему не удобный? Мне например не очень нравится когда один небольшой код расписывают на целую портянку и в результате пример оказывается ничтожным, а описание - очень большим, а на практике как известно учиться лучше чем в теории и демагогии.

Лучше больше кода и примеров и меньше слов.

Link to comment
Share on other sites

Ну хотя б отступов в коде можно надобавлять для улучшения читаемости. Как пример, вместо:

class Father {
var $muskules = "сильные мускулы";
}
class Mother extends Father {
var $eyes = "красивые глаза";
}
//этот класс должен унаследовать св-ва двух классов выше, или любого из них
class child extends Mother {
var $mind = "светлый ум";
}

можно написать:

class Father {
var $muskules = "сильные мускулы";
}

class Mother extends Father {
var $eyes = "красивые глаза";
}

//этот класс должен унаследовать св-ва двух классов выше, или любого из них
class child extends Mother {
var $mind = "светлый ум";
}

По моему так понятней... а может это дело вкуса.

Link to comment
Share on other sites

25 и 28 строки для чего нужны?

$rus->arms;
$rus->legs;

Ну и всё-таки правильнее для вывода (если используется, как у тебя, конкатерация точкой) использовать одиночные кавычки, а не двойные. А так, да, клёво. Такой простой и наглядный мануал. Зачёт.

Link to comment
Share on other sites

Veseloff да, эти строчки там действительно ни к чему, просто в классе до этого было эхо и поэтому сначала делал вывод так, потом убрал эхо с функцией а вывод остался ;)

С конкатенцией если честно не понял, почему пристыковку использовать с одиночными кавычками лучше?

Link to comment
Share on other sites

В одиночных кавычках парсер не ищет переменные, он точно знает что это 1)строка, 2)в ней нечего исполнять. Из за этого скрипт быстрей отрабатывает, особенно на очень длинных строках.

Link to comment
Share on other sites

А спецификатор var случаем не был признан устаревшим ?.

Не увидел:

const, и обращение к ним self.

Раз уж затронули специальные методы класса то где:

__destruct

__autoload

__get, __set

__iiset

__unset

__tostring

__call

Наследование:

parent - для обращения к базовым методам.

Link to comment
Share on other sites

__autoload - к магическим методам класса не относиться.

Нет так же "прав доступа" к переменным и методам класса, таких как public, private, protected.

P/S: Я лично не пользуюсь var для определения переменных класса. Это из PHP4 по моему...

Link to comment
Share on other sites

Так вроде базовые основы ООП. Мне показалось странным что они небыли затронуты. Хотя все от книги зависит.

Лично для себя делаю следующие шаги:

Читаю.

Пробую/экспериментирую.

Пишу в блокноте все что было прочтено ранее и в данный момент с описанием что есть что плюс простые примеры.

Потом визуально сравниваю с предыдущей писаниной и дописываю все что пропустил.

Запарно, но у мня котелок дырявый, а данный способ сопутствует запоминанию плюс вырисовывается некая логическая структура ну а с ней и понимания что к чему относиться т.к. в книгах не всегда все разложено именно так как тебе удобнее воспринимать.

Раньше еще пытался попутно что то реализовывать по мере прочтения, т.е. исходя из возможностей для саморазвития, к примеру простенький сайт с минимум опций.

По моему лучше всяких сомнительных заметок.

Link to comment
Share on other sites

А спецификатор var случаем не был признан устаревшим ?.

Не увидел:

const, и обращение к ним self.

Раз уж затронули специальные методы класса то где:

__destruct

__autoload

__get, __set

__iiset

__unset

__tostring

__call

Наследование:

parent - для обращения к базовым методам.

пример не претендует на полную спецификацию и для начинающего толчка вполне себе подойдет.

на счет остального - возможно буду дополнять примерами, но не факт, так как известно, что не все что есть в php в реале задействованно, пользуют только то что часто применяется в реальных проектах.

P.S. это просто заметка.

Нет так же "прав доступа" к переменным и методам класса, таких как public, private, protected.

P/S: Я лично не пользуюсь var для определения переменных класса. Это из PHP4 по моему...

public, private, protected, static - там есть в самом конце.

var - да, это устарело, но кто или что мешает ее использовать ровно так же как и в html таблицы?

по умолчанию если не определена переменная, то она вроде public.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy