5. ООП в PHP5. Константы в классах

👁 58 просмотров

Бывает так, что объект имеет постоянные характерные для себя значения, допустим, значение PI=3.14, E=2.7, G=8.9 и т.д. И для сохранения подобных констант нам необходимо будет создать константы в классе.

Для создания константы используется ключевое слово const и дальше пишется название константы без знака $, так как это уже будет как признак переменной. Еще принято писать константы в верхнем регистре в остальном не должны начинаться с цифр или содержать спец-символ, кроме символа подчеркивания и еще одна особенност констант — в том, что их сразу же надо объявлять при создании и это значение всегда будет в нем оставаться. Конечно, можно переопределить константу через функцию define(), здравый смысл подсказывает, что делать этого нельзя, хотя, решать вам :).

После того, как мы определили константу к нему еще надо обратиться через объект, но так как это не переменна, то доступ к константе и для этого существуют 4 способа, 2 из которых задействован начиная с PHP 5.3.

1. Доступ внутри класса — способ, при котором к константе можно обратиться через ключевое слово self:: или через название класса:


class MyClass{
  const MY_CONST = 3.14;
  public function myMethod()
  {
     echo self::MY_CONST + MyClass::MY_CONST;// Будет все равно, что 3.14*2
  }
}

2. Способ используется за пределами класса, так как у нас название класса уникально, а название констант может совпадать в разных классах, то следует их как -то идентифицировать и для этого используется вот такой же вариант:

MyClass::MY_CONST

который мы уже использовали выше;

3. Другой вариант — более новый, который поддерживается с версии 5.3 -‘это через имя объекта, если у нас есть несколько объектов(экземпляров) одного и того же класса, то через все эти объекты мы можем обратиться к ,определенной в данном классе, константе и значение всегда будет одно и то же, независимо какой объект, вот к примеру:


$newObj_1=new MyClass();
$newObj_2=new MyClass();
echo $newObj_1::MY_CONSTANT;//3.14
echo $newObj_2::MY_CONSTANT;//3.14

4. Еще один интересны способ — через строчное название класса, который поддерживается с версии 5.3 ,то есть определяем переменную с названием класса и через эту переменную обращаемся и вот как это выглядит:


$newVar_1="MyClass";
$newVar_2="MyClass";
echo $newVar_1::MY_CONSTANT;//3.14
echo $newVar_2::MY_CONSTANT;//3.14

Вот и все особенности констант в ООП PHP :).

4. ООП в PHP5. Свойства класса

👁 52 просмотров

Настало время поговорить о свойствах класса(или полях). Если в ООП класс описывает какую-то сущность, реальный объект, то он, чтобы описать этот объект должен содержать некие переменные, в которых находятся количественная харектиристика того или  иного объекта в действии. Допустим, у нас есть класс фигуры круга, то каждый экземпляр должен содержать свойства данной фигуры -цвет, координаты, размер радиуса в различных местах его использования вот для таких целей нам и нужны переменные(свойства).   Каждое свойство может иметь один из 3 модификаторов доступа — public, protected и private:

 
class Circle{
       public $x=0;
       protected $z=0;
       private $y=0;
//Методы для установки данных
public function setX($new_x)
{
$this->x=$new_x;
}
public function getY($new_y)
{
$this->y=$new_y;
}
public function getZ($new_z)
{
return $this->z=$new_z;
}

//Методы для получения данных
public function getX()
{
return $this->x;
}
public function getY()
{
return $this->y;
}
public function getZ()
{
return $this->z;
}
}

//Создадим объект
$newObj=new Circle();
/*1 способ установки и получения значений свойств для объекта*/
//Зададим свойства через метод установки
$newObj->setX(1);//Можно-через метод можно задать значение открытому св-ву
$newObj->setY(2);//Можно-через метод можно задать значение защишенному св-ву
$newObj->setZ(3);//Можно-через метод можно задать значение закрытому св-ву
//Получим свойства через методы возврата
echo $newObj->getX(1);//Можно-через метод можно получить значение открытого св-ва
echo $newObj->getY(2);//Можно-через метод можно получить значение защишенного св-ва
echo $newObj->getZ(3);//Можно-через метод можно получить значение закрытого св-ва
/*2 способ установки и получения значений свойств для объекта*/
//Зададим свойства через сам объект
$newObj->x=1;//Можно-через объект можно задать значение открытому св-ву
$newObj->y=2;//Нельзя-через объект нельзя задать значение защишенному св-ву
$newObj->z=3;//Нельзя-через объект нельзя задать значение закрытому св-ву
//Получим значения свойств через объект
echo $newObj->x;//Можно-через объект можно взять значение открытого св-ва
echo $newObj->y;//Нельзя-через объект нельзя взять значение защишенного св-ва
echo $newObj->z;//Нельзя-через объект нельзя взять значение закрытого св-ва

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

Разница между интерфейсом и абстрактным классом

👁 76 просмотров

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

Итак, давайте разберемся с основными понятиями иначе, зачем нам работать на интсрументе, название которого нам непонятно, не так ли? 🙂

Интерфейс (interface) — это некая совокупность возможностей или методов выполнения операций над объектом или объектами;

Абстракция (abstraction) -придание сущности или объекту некоторых конкретных черт, отвергая при этом несущественных;

Т.е. из описаний ясно, что интерфейс оперирует со свойствами и возможностями объекта, когда как абстрактный класс предоставляет саму сущность в корне, наследуя который, мы создаем на его основе все новые и новые родословные сущности.

Именования интерфейсов и абстрактных классов

Если вы хотите создать интерфейс или абстракцию, то следует придерживаться определенной семантики, это конечно, не строгие правила, но очень помогает при решении задачи ибо все упирается в возможности нашего мозга все запомнить, а это проблемное дело в таком деле, как программирование :).

При создании интерфейса им следует давать названия , которые описывают возможности объекта, которые могут обозначать прилагательное или причастие речи,к примеру : Flexible(изгибающийся),  Comparable(сравнимый), Sizeable(масштабируемый) и т.д.

При создании абстракции мы должны исходить из родительской сущности, да, именно из родительской, так как, если мы создаем абстрактный класс, то обязательно на его основе создаем наследование и переопределение его свойств иначе его смысл в ООП потерялся бы и для этого можно использовать существительное,к примеру: Car(машина), Figure(фигура), Wear(одежда), а конкретные реализации, допустим от Car, мы уже будем реализовывать при наследовании через обычные класс.

 

Связь триединства сущности — интерфейс, абстракция, класс.

Теперь давайте подумаем над тем, как формируется связь со всеми этими понятиями. Класс — это конечная возможность любой сущности, вот к примеру: кенгуру не может быть родителем другого класса животных, но он может быть классом сумчатых и класс сумчатых можно реализовать как интерфейс. Еще кенгуру умеет прыгать, пить, есть, размножаться и тогда логично добавить еще интерфейс его возможностей.

Покажем пример:


//Определим абстракцию фигуры
abstract class Figure{
    public $width,$x,$y,$z = 0;
    protected $hight = 0;
    private $size =0;

    const E = 2.7;

    abstract public function fit();
    public function setX($x)
        {
            $this->x=$x;
        }

}
//Определим интерфейс для фигур
interface Sizeable{
    const PI = 3.14;
    function setSize($scale);
}
//
interface Fitable{
    const WHITE = "FFFFFF";
    function setColor($color);
}
//Создадим конкретную сущность, удовлетворяющий вышеописанным условиям
class Rectangle extends Figure implements Sizable, Fitable{

   public function setSize($scale)
     {
           return ['witdh'=>($scale*$this->width),'hight'=>($scale*$this->hight)];
     }
   function setColor($color)
     {
           echo "Setting clor with code ".$color;
     }
}

Основные положения из этого всего.

Основные положения при создании абстрактного класса

1. Абстрактный класс и абстрактный метод создаются с помощью ключевого слова abstract;
2. Абстрактный класс обязательно должен содержать в себе хотябы один абстрактный метод;
3. Реализация абстрактного класса происходит через ключевое слово extends;
4. Класс может реализовать только один абстрактный класс;
5. Абстрактный класс, в отличии от интерфейса, может содержать реализованные методы;
6. Как и обычный класс может содержать поля, константы и методы с реализацией;
7. Абстрактные методы и поля можно объявлять с идентификаторами доступа public, protected, private и ,при реализации в классе, методы должны иметь такой же модификатор или менее ограниченный;
8. Абстрактные методы должны быть указаны явно через ключевое слово abstract;
9. При наследовании все методы, помеченные как абстрактные, должны быть реализованы в классе -потомке и ,при этом , область видимости этих методов должна совпадать (или быть менее строгой);
10. Сигнатуры , реализуемых в классе-потомке, методов должны совпадать, т.е. контроль типов и количество обязательных аргументов должно быть одинаковым;
11. Если в дочернем классе указан необязательный параметр, которого нет в сигнатуре абстрактного класса, то в данном случае конфликта сигнатур не будет. Это правило также применяется к конструкторам начиная с версии PHP 5.4. Это говорит о том, что, если в абстракции у нас метод с 2-мя аргументами, то в наследуемом классе мы можем переопределить этот метод с двумя аргументами или добавить еще, но никак не меньше;
12. Нельзя создать экземпляр или объект абстрактного класса;
13. Методы, объявленные как абстрактные не могут не могут нести реализацию , они имеют только опистельный смысл и должны быть обязательно реализованы в классе наследующим абстракцию;

Основные положения при создании интерфейса

1. Класс не может реализовать 2 интерфейса, у которых одинаковые методы ибо возникнет неоднозначность вызова;
2. Интерфейсы могут быть унаследованы друг от друга, так же как и классы, с помощью оператора extends;
3. Сигнатуры(т.е. количество передаваемых переменных и название метода) методов в классе, реализующем интерфейс, должны точно совпадать с сигнатурами, используемыми в интерфейсе, в противном случае будет вызвана фатальная ошибка;
4. Интерфейсы могут содержать константы. Константы интерфейсов работают точно так же, как и константы классов, за исключением того, что они не могут быть перекрыты наследующим классом или интерфейсом, иначе говоря не могут быть переопределены;
5. Все методы интерфейса, по умолчанию, являются абстрактными;
6. Все методы интерфейса, по умолчанию, являются публичными;
7. Интерфейс не может реализовать содержащиеся в нем методы, реализует наследующий класс;
8. Класс может наследовать интерфейс через ключевое слово implements;
9. Класс может реализвовать и наследовать несколько интерфейсов через запятые и названия интерфейсов;
10. Класс, реализующий интерфейс, должен обязательно реализовать код для всех методов наследуемого интерфейса;

2. Инсталяция Yii фреймворка на локальный сервер и запуск демо-сайта

👁 238 просмотров

Итак. В прошлой статье   мы разбирали что такое фреймворк. Настал момент, когда уже пришло этот фреймворк «попробовать на зуб». В этом уроке мы детально опишем как настроить Yii и запустить демо-сайт, который прилагается к нему в виде стандартного примера использования MVC, данный пример служит шаблоном проектирования на Yii и вы можете на основе данного примера построить свой проект. В конце урока я выложу скринкаст с YouTube, чтобы наглядно показать сей процесс 🙂 .

В первую очередь, вам необходимо установить Apache сервер интерпретатор PHP 5 или выше, в данном уроке я считаю, что он у вас установлен, если нет, то  чтобы не затягивать процесс с настройками отдельных модулей( Apache, PHP и MySQL), советую вам установить комплект уже готовой сборки на примере Denwer или, что еще лучще и рекомендую —OpenServer.

Оба пакета бесплатные и еще, чтобы запускать команды PHP интерпретатора через командную строку вам необходимо будет указать в перeменных средах путь к php.ini, у OpenServer она находится в директории C:\OpenServer\userdata\config\PHP-5.5.4_php.ini, конечно же, если вы установили так же, как и я в корень диска C. Чтобы прописать в Path откройте следующую цепочку: Пуск -> Компьтер + левой кнопуи мыши щелчок -> свойства -Дополнительные параметры системы -> перменные среды, выбираем Path +изменить и добавляем через ; путь  C:\OpenServer\userdata\config\PHP-5.5.4_php.ini:

 

perem-sredy-php-yii-inst

 

1. Первым делом нам необходимо скачать код фреймворка со всеми примера с оффициального сайта и разархивировать в папку на рабочий стол по именем yii(я условно назвал, не имеет разницы как вы папку назовете, главноеразархивируйте туда все содержимое);

2. Создаем на локальном сервере хост с новым доменным именем, к примеру, я назвался у себя как websofter.loc, и кидаем туда все содержимое архива архива, прямо в корень;

3. Теперь нам надо проинсталировать наш фреймворк и для этого нам будет необходимо выполнить файл yiic , который находится в папке C:\OpenServer\domains\WebSofter.loc\yii\framework и для этого заходим в командную строку и переходим в папку C:\OpenServer\domains\WebSofter.loc\yii\framework, выполнив команду:


>cd C:\OpenServer\domains\WebSofter.loc\yii\framework

perem-sredy-php-yii-cmd

4. Перешли в папку и теперь надо набрать команду php и запустить файл инсталяции yiic и указать папку, куда надо инсталлировать, а инсталлировать мы будем в корневую папку и для этого укажем в параметре путь C:\OpenServer\domains\WebSofter.loc, команда такая:

C:\OpenServer\domains\WebSofter.loc\yii\framework> php -f yiic webapp C:\OpenServer\domains\WebSofter.loc

после этого вам будет уведомление об установке примера, вы жмете yes и после успешно установки будет вот такое окно:

perem-sredy-php-yii-succefull

5. Все!  Процедура установки окончена и чтобы проверить работоспособность сайта откройте свой адрес локального хоста и у вас должен запуститься демо-сайт:

perem-sredy-php-yii-site

И все это можете еще подробно просмотреть на виде:

Удачной установки! 🙂

1. Введение в фрэймфоркинг

👁 66 просмотров

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

 

Фреймворк  — образовано от 2-х слов, английских — frame и work, что значит, при переводе, рабочая структура или рабочий каркас, на котором основывается весь процесс проектирования, играя роль кирпичиков, дверей, окон, черепицы и т.д.

Фреймворк преследует 2 главные цели:

1. Сократить или же вообще исключить повторение кода, чтобы уменьшить размер проекта;

2. Дать проектировщику основу и единый панель управления всеми частями проекта, чтобы можно было легко изменить и обновить код или версию, изменив, всего лишь, единицу фреймворка( интерфейс. класс, структуру, массив, функцию и т.д.), таким образом, вторая цель основывается на первой цели;

 

Следует отметить, что CMS — ЭТО НЕ ЕСТЬ ФРЕЙМВОРК! CMS проектируется на основе фреймворка, если образно, то CMS от WordPress и CMS от Joomla , можно построить на едином фреймворке и отличия у них будут только в CMS, основа единой и если изменить какой-то метод в классе фреймворка, то эти изменения коснутся и обеих CMS. CMS — это уже готовая платворма управления контентом через  интерфейс, для понимания которого не обязательно иметь навыки программирования.

Я люблю описывать мир древовидной структурой и создал для этого специальный раздел :). Давайте ка опишем это все как структуру и тогда у нас получится вот такая картинка:

 

В основе всего лежит язык программирования, неважно какой -PHP, C++, Java …, дальше уже идет парадигма ООП, которая специфична для каждого языка, дальше на сонове ООП строится фреймворк в котором реализуются весь набор минимальный операций, которые в дальнейшем группируются в CMS, к примеру: есть у нас в фреймворке класс для операции с базой данных, класс для операции постраничного вывода и класс формы ввода текста и на основе этих 3-х классов фреймворка мы можем создать функцию поиска  для CMS, когда в форму мы вводим ключевое слово, класс БД, на основе кл. слова выбирает данные, а класс постраничной навигации выводит всю эту информацию в удобный для читателя вид и эти три класса универсальны, они используются не только в поиске, но и при выводе постов блога, при вводе логина и пароля и т.д. В последующих постах мы подробно разберем специфику фреймворка Yii.

3. ООП в PHP5. Классы и объекты

👁 65 просмотров

Из продыдущего урока мы уже знаем что такое ООП и рассмотрели, теоретически, что такое класс и объект.

Как мы уже сказали, класс — это некий тип сущности, который мы можем унаследовать из реальной нашей с вами жизни и абстрагируясь от реальности решать задачу на уровне программинга. Ну так что, настало время вплотную приближаться к этим понятиям.

Объявление класса

Класс объявляется с помощью ключевого слова class, за которым следует имя класса и тело из фигурных скобок с реализацией его членов(свойств и методов). Имя класса может содержать буквы латинского алфавита и подчеркивание в сочетании с цифрами, но не начинаться с цифры, а также имя класса не должно повторять зарезервированное под PHP инструкцию языка на примере class, int, Array, private… . Рассмотрим пример реализации класса:


  class StudentA
  {
    public $name;
    private $age;
    protected $gender;

    public function sayName()
     {
         echo "Joobs!;
     }
  }

Выше в примере мы создали класс с именем StudentA, внутри которого создали свойства с различным доступом (protected, private, public) и реализовали метод sayName(), который, глядя на имя, можно понять что делает. В данном случае мы реализовали внутри класса некий чертеж , как именно должен собраться объект и, на основе открытых членов(свойств и методов) мы можем манипулировать этим объектом.

Создание объекта

Обект — по сути дела обычная переменная, которая хранит лишь ссылку на внутреннюю реализацию класса

2.ООП в PHP 5. Основы

👁 94 просмотров

Начнем с того, что такое класс и какую роль он играет в ООП. Данная часть поста может быть ориентирована на любой язык, в котором поддерживается ООП, так как ООП — по сути дела единая модель проектирования приложений и неважно на каком языке — будь-то Java, С#, C++, PHP… суть ООП во всех языках одна и та же — предоставить некий принцип, на основе синтаксиса языка, по которой можно было бы легко и быстро проектировать любой проект, за вами остается только изучить инструмент, в нашем случае PHP, познать все тонкости реализации ООП в этом языке, и используя их решать нашу задачу.

 Элементы ООП. Классы и объекты

     Базовым понятием в ООП является класс и объект(иногда его называют экземпляром класса). Суть ООП в том, что каждая сущность в нашем мире относится к какому то типу оъектов, по сути дела, это некая древовидная структура ибо так устроен наш мир, что есть корень, есть стержень, есть конечные ветки и плоды, но это не важно, абстрогируемся от материализма, нам сейчас нужна сама модель. Так вот, отнеся каждую сущность к определенному классу, мы можем эту сущность разделить на еще мелкие сущности и так до тех пор, пока мы не убедимся, что сможем реализовать эти мелкие сущности поочередно без какой-либо путаницы и в тоже время сам класс внутри себя реализует некое правило реализации и поведения конечного объекта, давайте посмотрим это все на примере:

Принцип ООП
Принцип ООП

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

Дадим краткие описания всем 3-м этим понятиям:

1. Наследование — это свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником или производным классом;

2. Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними в классе, и скрыть детали реализации от пользователя;

3. Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта;

Из выше сказанного, на данном этапе у нас есть следующие основные понятия ООП: класс, объект, наследование, инкапсуляция и полиморфизм. Давайте добавим ще 2 понятия — свойство и метод. Нам осталось соединить все эти понятия в единое осмысленную последовательность и их роль для построения ООП.

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

Как выше показано на картинке мы берем какую-то сущность, которая входит в нашу задачу, в данном случае, допустим, мы хотим создать базу данных по запчастям средств передвижения, я назвал эту базу данных как «Машина», который выступает и от него наследуются другие подобные машине сущности — паром, самолет, велосипед, грузовик и т.д., которые в свою очередь имеют свои собственные отличительные особенности, которые являются их свойствами и которые могут отличаться методами передвижения и у каждой такой сущности свои свойства и методы, которыми оперирует данная сущность.

Инкапсуляция

 

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

public,protected, private или еще — модификаторы доступа

На данном этапе. пока мы говорим об инкапсуляции, следует отметить о возможных вариантах инкапсуляции и их 3:

public — свойства и методы открыты и доступны из вне класса объектам данного класса и унаследованных классов;

protected — свойства и методы зашищены и доступны только внутри класса и и внутри унаследованных классов;

private — свойства и методы доступны только внутри класса и недоступны за его пределами , а также внутри унаследованных классов;

Так какую роль играют типы инкапсуляции — они дают разработчику определить общехарактерные признаки классов и их действия, а также запрещает использование нехарактерных признаков при наследовании и это правильно, потому что кошке не нужны жабры и лягушке не нужен клюв :).

Полиморфизм

       Нам осталось разобрать что такое полиморфизм. Вы только поразмыслите как это слово звучит — поли(множественность) и морфи(форма), что означает многоформенность. Возьмем из реальной жизни такие сущности или объекты как автомобиль, самолет, мотоцикл и попробуем в них найти сходные элементы и первое , что приходит на мысль — это колеса, то все они движутся благодаря вращению колеса с малыми отличиями. Если это все применить к ООП, то у нас должен быть главная сущность, от которого будут унаследованы все данные колесные средства передвижения и тогда у всех будет метод go(), который специфичен для каждого объекта, т.е. отличен в передвижении, к примеру, самолет должен набирать скорость постепенно до определенного уровня, чтобы взлететь, а автомобиль может иметь 4 — 5 скоростей и задний заезд, против переднего мотоцикла и в этой ситуации, когда все эти классы унаследованы от колесного класса возникает потребность в переопределении данных методов в унаследованных классах. И тут мы вплотную приближаемся к понятиям абстрактные классы и интерфейсы, которые служат начальной основой для переопределяемого кода в парадигме ООП.

Сначала определимся с новыми понятиями:

Интерфейс — это разновидность обычного класса, но не содержащего код реализации свойств и методов. Интерфейс может определять имена методов и свойств, но не содержит их определение и реализация. Класс может наследовать несколько интерфейсов и должен реализовать код для всех методов этих интерфейсов. Из этого следует, что интерфейс регламентируется базовыми принципами и эти принципы настолько обобщены, что не имеет смысла для наследующего класса и каждый наследующий, данный интерфейс, класс должен реализовать методы интерфейса самостоятельно.\ для своей конкретной цели.

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

Покажем все это на примере кода:


abstract class 	Machine {
 //определяем базовый общий метод
 abstract public function go();
}

//Унаследуем абстрактный класс и реализуем его абстрактный метод
class Auto{
  //Переопределяем абстрактный метод езды применительно к машине
  public function go()
  {
    echo("Правила езды для автомобиля");
  }
}

class Plane{
  //Переопределяем абстрактный метод езды применительно к самолету
  public function go()
  {
    echo("Правила езды для самолета");
  }
}

class Moto{
  //Переопределяем абстрактный метод езды применительно к мотоциклу
  public function go()
  {
    echo("Правила езды для мотоцикла");
  }
}

//Создаем экземпляры(объекты) этих классов

autoObj = new Auto();
planeObj = new Plane();
motoObj = new Moto();

//Попытаемся использовать и тогда
autoObj->go();//Выведет "Правила езды для автомобиля"
planeObj->go();//Выведет "Правила езды для самолета"
motoObj->go();//Выведет "Правила езды для мотоцикла"

И таким образом, не смотря на то, что все класс унаследовали один и тот же класс с одним и тем же методом, но реализация у них разная — это и объясняетя полиморфизмом, т.е. много объектов, а член(метод) у всех один и он индивидуален для каждого объекта, в зависимости от реализующего его класса. В дальнейшем, мы будем подробно обсуждать каждый из всех этих пунктов ООП в PHP 5.

Урок 1. Синтаксис языка PHP

👁 64 просмотров

Использование языка PHP

Язык PHP можно использовать в любом файле, который возможно парсировать с помощью интерпретатора PHP и в частности, он очень часто используется с языком HTML. Главной особенностью является то, что код PHP может генерировать HTML, являясь серверным языком и может быть вставлен в HTML, обрамив код специальными тегами:

   
      <?php 
        //Код PHP 
      ?> 

или тегами :

      <? 
        //Код PHP 
      ?> 

Разница между ними в том, что теги <?php ?> будут работать всегда и они по умолчанию включены , а у прощенный вариант по умолчанию запрещен и чтобы их использовать вам будет необходимо через командную строку выполнить операцию   —enable-short-tags  либо изменить в конфигурационном файле поле short_open_tag   на 1.  Выше мы рассмотрели вариант вcтавки в HTML, но обычно PHP код пишется в отдельном файле с расширением *.php и потом включается как модуль операции к основному файлу, чтобы было легче отлаживать. Существует несколько, общепринятых, расширений файловых расширений для кода PHP — php, php5, phtm, phtml… и это никак не влияет на обработку и выполнение кода, главное, чтобы это расширение было разрешено сервером на обработку.

Еще одной особенностью PHP является то, что последний тег можно опустить, если дальше нет никакого вывода информации:

 


    <?php
      echo "Hello world";
      // ... еще какой-то код
      echo "Последнее выражение";
      // Скрипт заканчивается без закрывающего тега PHP

Не родные теги

Помимо этого есть еще несколько вариантов тегов, которые оптимизированы для работы с документами XML и XHTML, в особенности  — теги <script language=»php»></script>, которые нам известны из клиентского языка JavaScript, чтобы выполнился код , необходимо явно указать тип языка в атрибуте language=»php»:

<script language="php">
   echo 'Будут проблемы с некоторыми редакторами, на пример с FrontPage';
</script>

Другой способ — это теги <%  %> в стиле ASP и доступны они только, если вы их включили через директиву asp_tags в конфигурационном файле php.ini, и разрешены через short_open_tag в конфигурационном файле php.ini, либо если PHP был скомпилирован с опцией —enable-short-tags:


<% echo 'Вы можете по выбору использовать теги в стиле ASP'; %>

Если вы еще новичок в PHP, не стоит на этом акцентировать внимание, чтобы не заблудиться и смело используйте всегда проверенный вариант <?php  ?>, а остальное уже в силу овладения, дабы облегчить процесс разработки.

 Признак окончания инструкции

Следует заметить, что по правилу синтаксиса языка язык PHP требует, чтобы после каждой инструкции стояла точка с запятой(;), который информирует интерпретатор PHP о том, что после данной инструкци будет другая инструкция или вообще не будет, но это можно опустить, если после инструкции следует закрывающий тег:


<?php
    echo 'Привет!';//Можно так
?>
<?php echo 'Привет!' //А можно и так, заметьте, не ставим точку с запятой, так как последний тег?>
<?php echo 'Опустили последний тег';//А можно и так

Комментарии

Все, что находится за пределами тегов PHP игнорируется и выводится как обычный текст или HTML для браузера и еще PHP игнорирует все, что находится за двумя косыми слешами // и между набором /**/ и является всего лишь комментарием для разъяснения принципа работы кода:


<?php
//Все, что за этими слешами является комментарием и игнорируется PHP,только на этой строке
/*Все, что внутри этого обрамления является комментарием и игнорируется PHP
можно перейти и на новую строку, но главное, чтобы все находилось внутри обрамления*/
?>

Кроме того, следует упомянуть об еще одном методе создания комментариев — это использование символа #:


  #Это тоже однострочный комментарий
  //как и это
  /*
  А это многострочный
  */

1. ООП в PHP 5. Вводная часть

👁 65 просмотров

Начиная с PHP 4 объектно-ориентированная модель PHP была полностью переписана в силу того, что полномасштабные крупные проекты в современном мире принято писать на модели ООП в виду его эффективности.  В PHP 3 ООП был реализован впервые, с этого момента ядро обновлялось с успехом и к версии PHP 4 движок работал уже намного быстрее, чем предыдущие версии , но было очень мало изменений в плане ООП.

Как ООП работало в PHP 4

В PHP 4 , несмотря на то, что ООП поддерживался, но он был еще очень сыроват для данного языка, главной особенностью было прожорливость ресурсов, так как объекты или экземпляры работали как копии, а не как ссылочные типы, как это сделано в Java или в C#, отсутствовала безопасное использование полей и методов.

Приведем пример:

class MyClass{

    var $field;

    function setField($variable) { this ->field = $variable; }
    function getField() { return  this ->field = $variable; }

} 
function setNewName($object, $name) 
{ 
    $object->setField($name); 
} 
$object = new MyClass(); 
$object ->setField("Вася"); 
setNewName($object, "Маша"); 
echo getField();//Выведет "Вася"

В данном примере то , что передается в функцию с экземпляром будет работать только внутри функции и не будет связан с внешним его экземпляром, точнее сказать, внутри функции мы работаем с копией данного экземпляра.

Что нового в PHP 5

Так как в PHP5 реализована уже зрелая модель ООП по сравнению с предыдущими версиями, то появились множество обновлений, в частности —  видимость, абстрактные и ненаследуемые (final) классы и методы, а также магические методы, интерфейсы, клонирование и контроль типов (typehinting). Теперь PHP работает с объектами как с ссылками, что означает, что каждая переменная хранит в себе ссылку на объект , а не его копию, что является большим преимуществом в плане снижения ресурсоемкости , быстродействия и построения крупных проектов. Об объектах и их особенностях мы еще поговорим в следующих уроках.

Использование Live Templates в PhpStorm

👁 176 просмотров

Часто бывает так, что вам приходится писать много однотипных операций — объявление классов, функций, массивов или какого то цикла операций. Чтобы не тратить на ввод каждый раз однотипных операций в PhpStorm создали такую фишку, которая носит название Live Templates, иначе говоря «живые шаблоны». Live Templates — это кусочки пользовательского кода , которые часто используются разработчиками. Вы можете добавить, редактировать  и удалять шаблоны,  сгруппирурая их в тот или иной язык.

Использование

Начну я с примеров использования LT. Чтобы посмотреть какие шаблоны нам доступны по умолчанию в PhpStorm откроем File -> Settings -> Live Templates и перед вами откроется окно как на рисунке:

php-live-tmlpl-1

Здесь представлены различные, стандартные, шаблоны кода, откройте вкладку php и наметим какой-нибудь шаблон, допусти шаблон создания закрытого метода под аббривиатурой prif, что означает Private Function. Закрываем окно настройки и переходим в редактор, открываем любой файл php расширения и нажимаем сочетание клавищ Ctrl + J и откроется список всех доступных шаблонов, которые будут отсортировываться в зависимости от того, что мы будем печатать, а печатать мы будем prif:

php-live-tmlpl-2

После жмете ENTER и данный шаблон вставиться в печатаемое место, вам остается всего лишь дописать название метода, ввести параметры и написать необходимый код и так со всеми остальными шаблонами-все очень просто:

php-live-tmlpl-3

Добавление новых шаблонов

Чтобы добавить новый шаблон, как и впредыдущий раз заходим в Settings  -> Live Templates или сразу жмите Alt +F7 и выбираем язык из списка существующих языков, допустим PHP и жмем зеленый плюсик в правом верхнем углу и вам предлагаю создать 1.Live Template(шаблон) или 2.Template Group(группу шаблонов), выберем шаблон:

php-live-tmlpl-4

Здесь вам предлагается ввести аббревиатуру для нового шаблона, по которому будет доступен данный шаблон, его следует подбирать в укороченной форме, чтобы не печатать длинный текст при подборе, вводите описание, чтобы не забыть что данный шаблон делает. Давайте создадим шаблон, который 5 раз выводит «Hello World» для этого пропишите все пункты, как указано на картинке и код:


for($i; $i<4; $i++)
{
echo "Hello".$i."\n";
$END$
}

не обращайте внимание на $END$, его мы обсудим попозже:

php-live-tmlpl-5

Все, создали и он будет теперь доступен как и все шаблоны.

Создание псевдопеременных в Live Templates

Псевдопеременные — это пользовательские переменные внутри шаблона, которые автоматически можно указать при вставке шаблона одним вводомт и вам не потребуется в каждом участке кода, где одна и та же переменная вновь и вновь написать одну и ту же переменную. Данные переменные начинаются и заканчиваются на знак $, к примеру, мы сейчас создадим переменную $i$ для нашего шаблона, для этого, вместо $i, напишем $i$ вот так:


for($i$; $i$<4; $i$++)
{
echo "Hello".$i$."\n";
$END$
}

php-live-tmlpl-6

 

Теперь нажимаем в редакторе, как в прошлый раз, Ctrl + J и печатаем say5hello и жмите ENTER, начинайте вводить переменную и вы увидите, как это название вставляется сразу в нескольких местах:

php-live-tmlpl-7

Открываем официальную страницу PhpStorm и видим такую надпись:

PhpStorm supports two predefined live template variables: $END$ and $SELECTION$.

Т.е. это уже предопределенные переменные, которые пользователь не может изменить. Переменная $END$  указывает положение курсора после того, как шаблон вставлен, а $SELECTION$  используется для фрагмента кода, который должен быть упакован. О всех особенностях Live Templates можете прочесть по этой же ссылке.