кодесурса
«PHP

PHP объектно-ориентированное программирование

script1adsense2code
script1adsense3code

Вступление

Объектно-ориентированное программирование - это подход к программированию, в котором используются объекты и классы. Современные Java и C ++ в основном используются для объектно-ориентированного программирования. В PHP 4 была ограниченная область объектно-ориентированного программирования, но в PHP 5 объектная модель была переписана для лучшей производительности и большего количества функций. Теперь PHP 5 имеет полную объектную модель.

Содержание:

Что такое объект?

Фундаментальная идея объектно-ориентированного языка состоит в том, чтобы объединить набор переменных и функций в единый модуль и защитить как переменные, так и функции от внешнего вмешательства и злоупотребления. Такая единица называется объектом, который действует на данные. Механизм, который связывает воедино данные и функции, называется инкапсуляцией. Эта функция облегчает повторное использование кода в различных проектах. Функции, объявленные в объекте, обеспечивают способ доступа к данным. Функции объекта называются методами, и все методы объекта имеют доступ к переменным, называемым свойствами.
На следующем рисунке показаны компоненты объекта.

Учебный класс

В объектно-ориентированном программировании класс - это конструкция или прототип, из которого создаются объекты. Класс определяет составные члены, которые позволяют экземплярам класса иметь состояние и поведение. Члены поля данных позволяют объекту класса поддерживать состояние, а методы - поведение объекта класса. На следующем рисунке показаны компоненты класса.

«концепция

PHP: создание классов и создание экземпляров

  • Определение класса начинается с ключевого слова class, за которым следует имя класса, затем следует набор фигурных скобок ( {} ), которые заключают в себе константы, переменные (называемые «свойствами») и функции (называемые «методами»), принадлежащие классу. ,
  • Допустимое имя класса (исключая зарезервированные слова) начинается с буквы или подчеркивания, за которым следует любое количество букв, цифр или подчеркиваний.
  • Имена классов обычно начинаются с заглавной буквы, чтобы отличать их от других идентификаторов.
  • Экземпляр - это объект, который был создан из существующего класса.
  • Создание объекта из существующего класса называется созданием объекта.
  • Чтобы создать объект из класса, необходимо использовать новое ключевое слово.
  • Классы должны быть определены до создания экземпляра.

Пример:

<?php
class Myclass
{      
 // Add property statements here
 // Add the methods here
} 
?>

В следующем примере ключевое слово new используется для создания экземпляра объекта. Здесь $ myobj представляет объект класса Myclass.

<?php    
$myobj = new MyClass; 
?>

Давайте посмотрим содержимое класса Myclass с помощью функции var_dump () (отобразить структурированную информацию (тип и значение) об одной или нескольких переменных):

<?php    
class Myclass
{      
 // Add property statements here
 // Add the methods here
}
$myobj = new MyClass;
var_dump($myobj);
?>

Выход:

 объект (Myclass) # 1 (0) {} 

Посмотреть пример в браузере

Настройка свойств

  • Переменные-члены класса называются свойствами. Иногда они упоминаются как атрибуты или поля.
  • Свойства содержат конкретные данные и связаны с классом, в котором они были определены.
  • Объявление свойства в классе - простая задача, используйте одно из ключевых слов public, protected или private, за которым следует обычное объявление переменной. Если объявлено с использованием var (совместимость с PHP 4), свойство будет определено как public.
    • public: свойство может быть доступно извне класса, либо скриптом, либо из другого класса
    • private: доступ не предоставляется извне класса ни сценарием, ни другим классом.
    • protected: доступ не предоставляется извне класса, кроме класса, который является дочерним по отношению к классу с защищенным свойством или методом.
  • nowdocs (начиная с PHP 5.3.0) можно использовать в любом контексте статических данных, включая объявления свойств.

Пример:

После создания объекта вы можете получить доступ к свойству класса, используя объект и оператор -> . Любой член, объявленный с ключевым словом "private" или "protected", не может быть доступен вне метода класса.

<?php   
class Myclass
{
 public $font_size =10;
}
$f = new MyClass;
echo $f->font_size;
?>

Выход:

 10 

Посмотреть пример в браузере

Примечание. Распространенной ошибкой является использование более одного знака доллара при доступе к переменным. В приведенном выше примере не будет знака $ перед font_size ( echo $ f-> font_size ).

После определения методов мы обсудим пример со свойствами открытого, закрытого и защищенного классов.

Методы настройки

  • Функции, которые объявлены в классе, называются методами.
  • Метод класса в точности похож на функции PHP.
  • Объявление метода в классе - простая задача, используйте одно из ключевых слов public, protected или private, за которым следует имя метода.
    • public: к методу можно получить доступ снаружи класса.
    • private: доступ вне класса не предоставляется.
    • protected: доступ не предоставляется извне класса, кроме класса, который является дочерним по отношению к классу с защищенным свойством или методом.
  • Допустимое имя метода начинается с буквы или подчеркивания, за которым следует любое количество букв, цифр или подчеркивания.
  • Тело метода заключено в пару фигурных скобок, которые содержат коды. Открывающая фигурная скобка ({) указывает начало кода метода, а закрывающая фигурная скобка (}) указывает на завершение метода.
  • Если метод не определен как общедоступный, защищенный или частный, то по умолчанию это общедоступный.
  • Может получить доступ к свойствам и методам текущего экземпляра, используя $ this (Format $ this-> property) для не статического свойства.

Пример:

После создания объекта вы можете получить доступ к методу класса, используя объект и оператор -> . В следующем примере метод customize_print () напечатает строку с определенным размером и цветом шрифта в элементе HTML-абзаца с помощью оператора php echo.

<?php   
class Myclass
{
 public $font_size ="18px";
 public $font_color = "blue";
 public $string_name = "w3resource";
 public function customize_print()
 {
 echo "<p style=font-size:".$this->font_size.";color:".$this->font_color.";>".$this->string_name."</p>";
 }
}
$f = new MyClass;
echo $f->customize_print();
?>

Выход:

«метод

Посмотреть пример в браузере

Теперь измените значение font_size, font_color и строки и проверьте, что возвращает метод custimize_print () .

<?php   
class Myclass
{
 public $font_size ="18px";
 public $font_color = "blue";
 public $string_name = "w3resource";
 public function customize_print()
 {
 echo "<p style=font-size:".$this->font_size.";color:".$this->font_color.";>".$this->string_name."</p>";
 }
}
$f = new MyClass;
$f->font_size = "20px";
$f->font_color = "red";
$f->string_name = "Object Oriented Programming";
echo $f->customize_print();
?>

Выход:
«метод

Посмотреть пример в браузере

PHP: Оператор разрешения области (: :)

В PHP оператор разрешения контекста также называется Paamayim Nekudotayim, что означает «двойное двоеточие» или «двойная точка дважды» на иврите. Двойное двоеточие (: :) - это токен, который обеспечивает доступ к статическим, постоянным и переопределенным свойствам или методам класса.

PHP: константы класса

  • Специальный объект, который остается фиксированным на индивидуальной основе класса.
  • Именам констант не предшествует знак доллара ($), как в обычном объявлении переменной.
  • Интерфейсы могут также включать константы.
  • При вызове константы класса с использованием синтаксиса $ classname :: constant имя класса может фактически быть переменной.
  • Начиная с PHP 5.3, вы можете получить доступ к статической константе класса, используя ссылку на переменную (Пример: className :: $ varConstant).

Определите и используя постоянную

<?php
  class MyClass
  {
  const constant1 ='PHP Class Constant';
  function PrintConstant() 
  {
  echo  self::constant1 . "<br>";
  }
  }
  echo MyClass::constant1 . "<br>";
  $classname = "MyClass";
  echo $classname::constant1 . "<br>"; // As of PHP 5.3.0
  $class = new MyClass();
  $class->PrintConstant();
  echo $class::constant1."<br>"; // As of PHP 5.3.0
 ?>

Понимание государственных, частных, охраняемых объектов

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

Пример:

<?php
// Define a class
class Myclass
{
 // Declare $font_size as Public property
 public $font_size ="18px"; 
 // Declare $font_color as Private property
 private $font_color = "blue"; 
 // Declare $string_name as Protected property
 protected $string_name = "w3resource"; 
 // Declare a method to print properties value. This is public.
 function property_print()
 {
 echo $this->font_size;
 echo $this->font_color;
 echo $this->string_name;
 }
}
$obj = new MyClass;
echo $obj->font_size; //Display 18px 
echo $obj->font_color; //Fatal error: Cannot access private property Myclass::$font_color in F:\wamp\..
echo $obj->string_name; //Fatal error: Cannot access protected property Myclass::$string_name in F:\wamp\.. 
$obj->property_print(); //Display 18pxbluew3resource
?>

Понимание публичных, частных, защищенных методов

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

<?php
// Define a class
class Myclass
 {
 // Declare a public method
public function my_public_method() { echo "This is a Public method"; } private function my_private_method() { echo "This is a Private method"; } protected function my_protected_method() { echo "This is a Protected method"; } // This is public function test() { $this->my_public_method(); $this->my_private_method(); $this->my_protected_method(); } } $obj = new MyClass; $obj->my_public_method(); //Display This is a Public method $obj->my_private_method();//Fatal error: Call to private method Myclass::my_private_method() from context '' in F:\wamp\www.. $obj>my_protected_method();//Fatal error: Call to undefined function my_protected_method() in F:\wamp\www.. $obj->test(); //Display This is a Public methodThis is a Private methodThis is a Protected method ?>

Примечание: PHP использует наследование в своей объектной модели, и когда вы расширяете класс, подкласс наследует все открытые и защищенные методы от родительского класса. Когда мы обсудим наследование, вы получите больше информации о защищенных свойствах и методах.

Методы конструктора PHP

  • Конструктор - это специальный встроенный метод, добавленный в PHP 5, позволяющий разработчикам объявлять для классов.
  • Конструкторы позволяют инициализировать свойства объекта (то есть значения свойств) при создании объекта.
  • Классы, которые имеют метод конструктора, выполняются автоматически при создании объекта.
  • Метод construct начинается с двух подчеркиваний (__).
  • Конструктор не требуется, если вы не хотите передавать какие-либо значения свойств или выполнять какие-либо действия при создании объекта.
  • PHP всегда вызывает только один конструктор.

Общий синтаксис объявления конструктора следующий:

функция __construct ([аргумент1, аргумент2, ..., аргументN])
{
/ * Код инициализации класса * /
}
Тип аргумента 1, аргумент 2, ......., аргумент N являются смешанными.

Пример:

<?php
// Define a class
 class Myclass
 {
// Declaring three private varaibles
 private $font_size;
 private $font_color;
 private $string_value;
// Declarte construct method which accepts three parameters
 function __construct($font_size,$font_color,$string_value)
 {
 $this->font_size = $font_size;
 $this->font_color = $font_color;
 $this->string_value = $string_value;
 }
// Declare a method for customize print 
 function customize_print()
 {
 echo "<p style=font-size:".$this->font_size.";color:".$this->font_color.";>".$this->string_value."</p>";
 } 
 }
// Create a new object and passes three parameters
 $f = new MyClass('20px','red','Object Oriented Programming');
// Call the method to display the string
 echo $f->customize_print();
 ?>

Выход:

«метод

Посмотреть пример в браузере

Еще пример по конструкторам:

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

<?php
// Define a class
 class Myclass
 {
// Declaring three private variables
 private $font_size;
 private $font_color;
 private $string_value;
// Declarte construct method which accepts three parameters and the method customize_print()
 function __construct($font_size,$font_color,$string_value)
 {
 $this->font_size = $font_size;
 $this->font_color = $font_color;
 $this->string_value = $string_value;
 $this->customize_print();
 }
// Declare a method for customize print 
 function customize_print()
 {
 echo "<p style=font-size:".$this->font_size.";color:".$this->font_color.";>".$this->string_value."</p>";
 } 
 }
// Create a new object and passes three parameters 
 $f = new MyClass('20px','red','Object Oriented Programming');
 ?>

Выход:

«метод

Посмотреть пример в браузере

Методы деструкторов PHP

  • Деструктор является аналогом конструктора.
  • Функция деструктора вызывается при уничтожении объекта
  • Функция деструктора очищает любые ресурсы, выделенные объекту после уничтожения объекта.
  • Функция деструктора обычно вызывается двумя способами: когда скрипт завершается или вручную удаляет объект с помощью функции unset ()
  • Метод «деструктор» начинается с двух подчеркиваний (__).

Общий синтаксис объявления деструктора следующий:

функция __destruct
{
/ * Код инициализации класса * /
}
Тип аргумента 1, аргумент 2, ......., аргумент N являются смешанными.

Пример:

<?php
// Define a class
class MyClass
{
 function __construct() 
  {
    echo 'w3resource'.'<br>';
    $this->name = "MyClass";
  }
 function __destruct() 
  {
    echo "Destroying " . $this->name . "<br>";
  }
}
$obj = new MyClass();
?>

Выход:

 w3resource
Уничтожение MyClass 

Посмотреть пример в браузере

PHP: использование нескольких экземпляров одного класса

В следующем примере мы создали несколько объектов (экземпляров) одного класса и передали разные значения.

<?php
// Define a class
class Myclass
 {
// Declaring three private varaibles
 private $font_size;
 private $font_color;
 private $string_value;
// Declarte construct method which accepts three parameters and the method customize_print()
 function __construct($font_size,$font_color,$string_value)
 {
 $this->font_size = $font_size;
 $this->font_color = $font_color;
 $this->string_value = $string_value;
 $this->customize_print();
 }
// Declare a method for customize print 
 function customize_print()
 {
 echo "<p style=font-size:".$this->font_size.";color:".$this->font_color.";>".$this->string_value."</p>";
 }
 }
// Create first object and passes three parameters 
 $a = new MyClass('30px','red','Object Oriented Programming');
// Create second object and passes three parameters 
 $b = new MyClass('25px','blue','Object Oriented Programming');
// Create third object and passes three parameters 
 $c = new MyClass('20px','green','Object Oriented Programming');
// Create fourth object and passes three parameters 
 $d = new MyClass('15px','black','Object Oriented Programming');
 ?>

Выход:

«множественный

Посмотреть пример в браузере

PHP: spl_autoload_register ()

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

Синтаксис:

 bool spl_autoload_register ([вызываемая $ autoload_function [, bool $ throw = true [, bool $ prepend = false]]])

параметр

название Описание
autoload_function Функция автозагрузки регистрируется. Если параметр не указан, то по умолчанию будет реализована реализация spl_autoload ().
бросать Этот параметр указывает, должна ли функция spl_autoload_register () генерировать исключения, когда функция autoload_function не может быть зарегистрирована.
перед именем Если это правда, spl_autoload_register () будет предшествовать автозагрузчику в стеке автозагрузки, а не добавлять его.

Возвращаемые значения

Возвращает TRUE в случае успеха или FALSE в случае неудачи.

Вы можете использовать функцию spl_autoload_register () следующим образом:

<?php
 spl_autoload_register(function ($class) 
 {
 include 'classes/' . $class . '.class.php';
 });
?>

Пример:

Сначала мы создадим два класса и сохраним их в / php / classes-objects / resource path:

class1.php

<?php
// Define a class
class class1
 {
// Declaring two private varaibles
 private $font_color;
 private $string_value;
// Declarte construct method which accepts two parameters and the method customize_print1()
 function __construct($font_color,$string_value)
 {
 $this->font_color = $font_color;
 $this->string_value = $string_value;
 $this->customize_print1();
 }
// Declare a method for customize print 
 function customize_print1()
 {
 echo "<p style=color:".$this->font_color.";>".$this->string_value."</p>";
 } 
 }
?>

class2.php

<?php
// Define a class
class class2
 {
// Declaring two private varaibles
 private $font_size;
 private $string_value;
// Declarte construct method which accepts two parameters and the method customize_print2()
 function __construct($font_size,$string_value)
 {
 $this->font_size = $font_size;
 $this->string_value = $string_value;
 $this->customize_print2();
 }
// Declare a method for customize print 
 function customize_print2()
 {
 echo "<p style=font-size:".$this->font_size.";>".$this->string_value."</p>";
 }
 }
?>

Теперь создайте файл printstring.php и сохраните его в / php / classes-objects:

<?php
spl_autoload_register(function ($class)
 {
 include '../../php/classes-objects/resource/'.$class.'.php';
 });
$print1 = new class1('red','Object Oriented Programming'); 
$print2 = new class2('20px','Object Oriented Programming'); 
?>

В приведенном выше примере мы пытаемся создать два объекта, где имена классов «class1» (сохранить в /php/classes-objects/resource/class1.php) и «class2» (сохранить в / php / classes-objects / resource / class2.php). PHP передает это имя в виде строки в spl_autoload_register (), которая позволяет вам выбрать переменную и использовать ее для «включения» соответствующего класса / файла.

Выход:

«autoupload

Посмотреть пример в браузере

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

  • Наследование - это устоявшийся принцип программирования.
  • Наследование позволяет классам формировать иерархию, подобную генеалогическому дереву.
  • Позволяет подклассам совместно использовать методы и свойства (открытые или защищенные) своего суперкласса.
  • Суперкласс является родительским классом.
  • Подкласс может добавлять свойства и методы.
  • Наследование позволяет повторно использовать код.
«PHP

Пример:

В следующем примере подкласса «Mysubclass» наследует все защищенные свойства и открытый метод от класса «Myclass». Кроме того, мы добавляем атрибут украшения текста в оператор echo в подклассе «Mysubclass».

<?php
// Define a class
class Myclass
 {
// Declaring three protected varaibles
protected $font_size; protected $font_color; protected $string_value; // Declarte construct method which accepts three parameters and the method customize_print() function __construct($font_size,$font_color,$string_value) { $this->font_size = $font_size; $this->font_color = $font_color; $this->string_value = $string_value; $this->customize_print(); } // Declare a method for customize print public function customize_print() { echo "<p style=font-size:".$this->font_size.";color:".$this->font_color.";>".$this->string_value."</p>"; } } // Define a subclass class Mysubclass extends Myclass { // Call the method customize print() and add the text decoration attribute within echo statement public function customize_print() { echo "<p style=font-size:".$this->font_size.";color:".$this->font_color.";text-decoration:underline;>".$this->string_value."</p>"; } } // Create objects and passes parameters $p = new Myclass('20px','red','Object Oriented Programming'); $s = new Mysubclass('15px','green','Object Oriented Programming'); ?>

Выход:

«autoupload

Посмотреть пример в браузере

PHP: интерфейсы

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

Синтаксис:

 интерфейс MyInterface
 {
   функция method1 ();
   функция method2 ();  
 } 
класс MyClass реализует MyInterface  
 { 
   функция method1 () 
    { 
 	    // определение method1 
    }
   функция method2 ()
    {
	   // определение method2
    }
 } 

PHP: клонирование объектов

  • Клонирование используется для создания копии объекта.
  • Копия объекта создается с помощью ключевого слова clone .
  • Когда объект клонируется, PHP 5 выполнит поверхностную копию всех свойств объекта.
  • Любые свойства, которые являются ссылками на другие переменные, останутся ссылками.
  • PHP предоставляет специальный метод __clone для копирования объекта.
  • После завершения клонирования, если определен метод __clone (), будет вызван метод вновь созданного объекта __clone (), чтобы разрешить любые необходимые свойства, которые необходимо изменить.

Пример:

В PHP клонирование объектов осуществляется с помощью ключевого слова clone . Вот пример клонирования объекта:

Пример: клонирование объекта с помощью магического метода __clone

<?php
class MyClass
{
 public $x;
 private $y;
 function __construct($x, $y)
 {
  $this->
  x = $x;
  $this->
  y = $y;
 }
 function __clone()
 {
  $this->x = "z";
 }
}
$a = new MyClass("w3resource", "com"); // create a new object
$b = clone $a; //clone of the object
var_dump($a);
echo '<br>';
var_dump($b);
?>

Выход:

 object (MyClass) # 1 (2) {["x"] => string (10) "w3resource" ["y": "MyClass": private] => string (3) "com"}
          object (MyClass) # 2 (2) {["x"] => string (1) "z" ["y": "MyClass": private] => string (3) "com"} 

Посмотреть пример в браузере

PHP: магические методы

Имена функций __construct (), __destruct (), __call (), __callStatic (), __get (), __set (), __isset (), __unset (), __sleep (), __wakeup (), __toString (), __invoke () , __set_state () и __clone () магические в классах PHP. PHP резервирует все имена функций, начинающиеся с __, как магические.

Мы уже обсуждали методы __construct (), __destruct () и __clone ().

Вот другие магические методы:

__вызов()

__call () запускается при вызове недоступных методов в контексте объекта.

Синтаксис: public mixed __call (строка $ name, массив $ arguments)

__callStatic ()

__callStatic () срабатывает при вызове недоступных методов в статическом контексте.

Синтаксис: public mixed __call (строка $ name, массив $ arguments)

__получить()

__get () используется для чтения данных из недоступных свойств.

Синтаксис: public mixed __get (строка $ name)

__задавать()

__set () запускается при записи данных в недоступные свойства.

Синтаксис: public void __set (строка $ name, смешанное значение $)

__isset ()

__isset () вызывается вызовом isset () или empty () для недоступных свойств.

Синтаксис: public bool __isset (строка $ name)

__unset ()

__unset () вызывается, когда unset () используется для недоступных свойств.

Синтаксис: public void __unset (строка $ name)

__спать()

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

Синтаксис: открытый массив __sleep (void)

__просыпайся()

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

Синтаксис: void __wakeup (void)

__нанизывать()

Метод __toString () позволяет классу решить, как он будет реагировать, когда обрабатывается как строка.

Синтаксис: открытая строка __toString (void)

__invoke ()

Метод __invoke () вызывается, когда скрипт пытается вызвать объект как функцию.

Синтаксис: смешанный __invoke ([$ ...])

__set_state ()

Этот статический метод вызывается для классов, экспортируемых var_export () начиная с PHP 5.1.0.

Синтаксис: статический объект __set_state (массив $ properties)

Мы приведем несколько примеров магических методов в ближайшее время.

Предыдущая: PHP User Define Function
Далее: PHP PDO

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code