Latest web development tutorials
×

PHP курс

PHP курс PHP Краткое введение PHP устанавливать PHP грамматика PHP переменная PHP echo/print PHP Типы данных PHP постоянная PHP строка PHP операторы PHP If...Else PHP Switch PHP массив PHP Сортировка массива PHP Суперглобальные PHP While циркуляция PHP For циркуляция PHP функция PHP Магические Переменные PHP Пространства имен PHP Объектно-ориентированный

PHP форма

PHP форма PHP Аутентификация с помощью форм PHP форма - Обязательные для заполнения поля PHP форма - Проверка электронной почты и URL PHP Полный экземпляр формы PHP $_GET переменная PHP $_POST переменная

PHP Расширенный учебник

PHP Многомерные Массивы PHP дата PHP содержать PHP файл PHP Загрузка файлов PHP Cookie PHP Session PHP E-mail PHP безопасности E-mail PHP Error PHP Exception PHP фильтр PHP Расширенный фильтр PHP JSON

PHP 7 Новые возможности

PHP 7 Новые возможности

PHP база данных

PHP MySQL Краткое введение PHP MySQL подключение PHP MySQL Создание базы данных PHP MySQL Создание таблицы данных PHP MySQL Вставка данных PHP MySQL Вставка нескольких данных PHP MySQL Подготовленные выражения PHP MySQL Считывание данных PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX Краткое введение AJAX PHP AJAX база данных AJAX XML AJAX Поиск в реальном времени AJAX RSS Reader AJAX голосование

PHP справочное руководство

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP обработка изображений PHP RESTful

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

В объектно-ориентированное программирование (английский: объектно-ориентированное программирование, сокращение: ООП), объект представляет собой описание обработки информации и информации, состоящей из целого, реальный мир абстракции.

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

Три основные характеристики объекта:

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

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


Содержание Объектно-ориентированное

  • Класс - определяет абстрактные характеристики вещи.Определение класса содержит данные формы и операции над данными.

  • Объекты - это экземпляр класса.

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

  • Функция член - определяется внутри класса можно использовать для доступа к данным объектам.

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

  • Родительский класс - класс наследуется другими классами, класс может быть назван родительский класс, группа или класс, или суперкласс.

  • Подкласс - класс , который наследует другой класс называется подклассом также можно назвать производным классом.

  • Полиморфизм - Полиморфизм относится к той же операции или функции, то процесс может быть применен к нескольким типам объектов и получить разные результаты.Различные объекты, вы получаете то же самое сообщение может привести к разным результатам, это явление называется полиморфизмом.

  • Перегрузка - Короче говоря, это функция или метод с тем же именем, но список параметров не та же ситуация, такая функция или метод между различными параметрами одного и того же имени, каждая перегруженная функция или метод вызывается.

  • Реферат - Абстрактный относится к наличию последовательной структуры данных (атрибутов) и поведение (операции) объектов на классы.Такой класс является абстракцией, она отражает важные свойства, связанные с приложением, игнорируя при этом другие, не связанные содержания. Любой класс деление носит субъективный характер, но они должны быть связаны с конкретным применением.

  • Пакет - Пакет относится к свойствам и поведение объекта в реальном мире существует для того чтобы связать вместе и помещены в логическую единицу.

  • Конструктор - в основном используется для инициализации объекта при создании объекта, объект присваивается начальное значение переменной - члена, всегда используйте оператор создания объекта с новым оператором.

  • Деструктор - деструктор (деструктор) и конструктор В противоположность этому , когда конечный объект его жизненного цикла (например, если объект является вызовом функции завершена), система автоматически выполняет деструктор.Деструкторы часто используются, чтобы "очистить последствия" работы (например, при создании объекта с новым открыто одно пространство памяти следует использовать перед выходом в деструкторе удалить релиз).

На следующем рисунке мы создаем три объекта класса автомобилей: Mercedes, BMW, и Audi.

$mercedes = new Car ();
$bmw = new Car ();
$audi = new Car ();


Определение класса PHP

PHP пользовательский класс, как правило, синтаксис выглядит следующим образом:

<?php
class phpClass {
  var $var1;
  var $var2 = "constant string";
  
  function myfunc ($arg1, $arg2) {
     [..]
  }
  [..]
}
?>

Интерпретировано следующим образом:

  • После того, как класс , используякласс ключевого слова плюс имя определения класса.

  • Пара скобок после имени класса можно определить переменные и методы ({}) внутри.

  • Переменные класса с помощьювар объявлять переменные также можно инициализировать значения.

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

примеров

<?php
class Site {
  /* 成员变量 */
  var $url;
  var $title;
  
  /* 成员函数 */
  function setUrl($par){
     $this->url = $par;
  }
  
  function getUrl(){
     echo $this->url . PHP_EOL;
  }
  
  function setTitle($par){
     $this->title = $par;
  }
  
  function getTitle(){
     echo $this->title . PHP_EOL;
  }
}
?>

$ Эта переменная представляют свои объекты.

PHP_EOL новой строки.


PHP для создания объектов

После создания класса, мы можем использоватьновый оператор для создания экземпляра объекта класса:

$w3big = new Site;
$taobao = new Site;
$google = new Site;

Приведенный выше код мы создаем три объекта, каждый из трех объектов независимы, то мы рассмотрим, как получить доступ к методам членов и переменных-членов.

Вызов метода член

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

// 调用成员函数,设置标题和URL
$w3big->setTitle( "本教程" );
$taobao->setTitle( "淘宝" );
$google->setTitle( "Google 搜索" );

$w3big->setUrl( 'www.w3big.com' );
$taobao->setUrl( 'www.taobao.com' );
$google->setUrl( 'www.google.com' );

// 调用成员函数,获取标题和URL
$w3big->getTitle();
$taobao->getTitle();
$google->getTitle();

$w3big->getUrl();
$taobao->getUrl();
$google->getUrl();

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

примеров

<? PHP
Класс сайта {
/ * * Переменные - члены /
вар $ URL;
переменная $ название;

/ * Функция член * /
Функция setUrl ($ п) {
$ Это -> URL = $ пар ;
}

Функция GetURL () {
. Эхо $ это -> URL PHP_EOL ;
}

Функция SetTitle ($ п) {
$ Это -> название = $ пар ;
}

функционировать GetTitle () {
Эхо $ это -> название PHP_EOL. ;
}
}

$ W3big = новый сайт;
$ = Новый Taobao сайта;
$ Google = новый сайт;

// Функция вызвана , чтобы установить название и URL
$ W3big -> SetTitle ( "учебник");
$ Taobao -> SetTitle ( "Taobao");
$ Google -> SetTitle ( "Google Search");

$ W3big -> setUrl ( 'www.w3big.com ');
$ Taobao -> setUrl ( 'www.taobao.com ');
$ Google -> setUrl ( 'www.google.com ');

// Вызов функции - члена , чтобы получить название и URL
$ W3big -> GetTitle ();
$ Taobao -> GetTitle ();
$ Google -> GetTitle ();

$ W3big -> GetURL ();
$ Taobao -> GetURL ();
$ Google -> GetURL ();
?>

Запуск экземпляра »

Реализация указанного выше кода, выход:

本教程
淘宝
Google 搜索
www.w3big.com
www.taobao.com
www.google.com

PHP Конструкторская

Конструктор представляет собой специальный метод. В основном используется для инициализации объекта при создании объекта, объект присваивается начальное значение переменной-члена, всегда используйте оператор создания объекта с новым оператором.

PHP 5 позволяет разработчикам определить метод строку в классе как синтаксис конструктора выглядит следующим образом:

void __construct ([ mixed $args [, $... ]] )

В приведенном выше примере, мы можем инициализировать $ URL и переменную $ заголовка с помощью конструктора:

function __construct( $par1, $par2 ) {
   $this->url = $par1;
   $this->title = $par2;
}

Теперь нам не нужно, чтобы вызвать метод SetTitle и setUrl:

примеров

$ W3big = новый сайт ( 'www.w3big.com ', ' учебник');
$ = Новый Taobao сайта ( 'www.taobao.com ', ' Taobao');
$ Google = новый сайт ( 'www.google.com ', 'Google поиск');

// Вызов функции - члена , чтобы получить название и URL
$ W3big-> GetTitle ();
$ Taobao-> GetTitle ();
$ Google-> GetTitle ();

$ W3big-> GetURL ();
$ Taobao-> GetURL ();
$ Google-> GetURL ();

Запуск экземпляра »

Разрушитель

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

PHP 5 вводит понятие деструктора, который похож на других объектно-ориентированных языков программирования, синтаксис выглядит следующим образом:

void __destruct ( void )

примеров

<?php
class MyDestructableClass {
   function __construct() {
       print "构造函数\n";
       $this->name = "MyDestructableClass";
   }

   function __destruct() {
       print "销毁 " . $this->name . "\n";
   }
}

$obj = new MyDestructableClass();
?>

Реализация указанного выше кода, выход:

构造函数
销毁 MyDestructableClass

унаследовать

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

class Child extends Parent {
   // 代码部分
}

примеров

Пример Child_Site класс наследует класс сайта и расширяет функциональные возможности:

<?php 
// 子类扩展站点类别
class Child_Site extends Site {
   var $category;

	function setCate($par){
		$this->category = $par;
	}
  
	function getCate(){
		echo $this->category . PHP_EOL;
	}
}

метод переопределяет

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

Пример переписаны GetURL и GetTitle методы:

function getUrl() {
   echo $this->url . PHP_EOL;
   return $this->url;
}
   
function getTitle(){
   echo $this->title . PHP_EOL;
   return $this->title;
}

Контроль доступа

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

  • общественности (Public): член общественного класса могут быть доступны в любом месте.
  • защищенный (защищенный): защищенный член класса можно получить по своей собственной, а также его суб-класса и родительского класса.
  • частные (частные): члены частного класса могут быть доступны только тогда, когда определение класса.

Атрибуты контроля доступа

Атрибут класса должен быть определен как общественной, защищенной частной. Если он определен с вар, считается публичной.

<?php
/**
 * Define MyClass
 */
class MyClass
{
    public $public = 'Public';
    protected $protected = 'Protected';
    private $private = 'Private';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // 可以对 public 和 protected 进行重定义,但 private 而不能
    protected $protected = 'Protected2';

    function printHello()
    {
        echo $this->public;
        echo $this->protected;
        echo $this->private;
    }
}

$obj2 = new MyClass2();
echo $obj2->public; // 这行能被正常执行
echo $obj2->private; // 未定义 private
echo $obj2->protected; // 这行会产生一个致命错误
$obj2->printHello(); // 输出 Public、Protected2 和 Undefined

?>

Методы контроля доступа

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

<?php
/**
 * Define MyClass
 */
class MyClass
{
    // 声明一个公有的构造函数
    public function __construct() { }

    // 声明一个公有的方法
    public function MyPublic() { }

    // 声明一个受保护的方法
    protected function MyProtected() { }

    // 声明一个私有的方法
    private function MyPrivate() { }

    // 此方法为公有
    function Foo()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate();
    }
}

$myclass = new MyClass;
$myclass->MyPublic(); // 这行能被正常执行
$myclass->MyProtected(); // 这行会产生一个致命错误
$myclass->MyPrivate(); // 这行会产生一个致命错误
$myclass->Foo(); // 公有,受保护,私有都可以执行


/**
 * Define MyClass2
 */
class MyClass2 extends MyClass
{
    // 此方法为公有
    function Foo2()
    {
        $this->MyPublic();
        $this->MyProtected();
        $this->MyPrivate(); // 这行会产生一个致命错误
    }
}

$myclass2 = new MyClass2;
$myclass2->MyPublic(); // 这行能被正常执行
$myclass2->Foo2(); // 公有的和受保护的都可执行,但私有的不行

class Bar 
{
    public function test() {
        $this->testPrivate();
        $this->testPublic();
    }

    public function testPublic() {
        echo "Bar::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Bar::testPrivate\n";
    }
}

class Foo extends Bar 
{
    public function testPublic() {
        echo "Foo::testPublic\n";
    }
    
    private function testPrivate() {
        echo "Foo::testPrivate\n";
    }
}

$myFoo = new foo();
$myFoo->test(); // Bar::testPrivate 
                // Foo::testPublic
?>

интерфейс

С помощью интерфейса (интерфейс), вы можете указать, какие методы класс должен реализовать, но не нужно, чтобы определить конкретное содержание этих методов.

Интерфейс определяетсяинтерфейсом ключевого слова, как определение стандартного класса, но который определяет все методы являются пустыми.

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

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

<?php

// 声明一个'iTemplate'接口
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}


// 实现接口
class Template implements iTemplate
{
    private $vars = array();
  
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
  
    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace('{' . $name . '}', $value, $template);
        }
 
        return $template;
    }
}

постоянная

Вы можете поместить в класс остается те же значения, определенные как константы. В определении и использовании постоянных времени не нужно использовать символ $.

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

Начиная с PHP 5.3.0 и далее, вы можете использовать переменную, чтобы динамически вызвать класс. Но значение переменной не может быть ключевым словом (например, самостоятельно, родитель или статический).

примеров

<?php
class MyClass
{
    const constant = '常量值';

    function showConstant() {
        echo  self::constant . PHP_EOL;
    }
}

echo MyClass::constant . PHP_EOL;

$classname = "MyClass";
echo $classname::constant . PHP_EOL; // 自 5.3.0 起

$class = new MyClass();
$class->showConstant();

echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起
?>

Абстрактный класс

Любой класс, если он содержит, по меньшей мере, один метод объявлен абстрактным, то этот класс должен быть объявлен как абстрактный.

Определяется как абстрактный класс не может быть создан.

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

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

<?php
abstract class AbstractClass
{
 // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue() . PHP_EOL;
    }
}

class ConcreteClass1 extends AbstractClass
{
    protected function getValue() {
        return "ConcreteClass1";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass
{
    public function getValue() {
        return "ConcreteClass2";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') . PHP_EOL;

$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') . PHP_EOL;
?>

Реализация указанного выше кода, выход:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

Статическая Ключевое слово

Объявите свойства или методы класса, как статический (Static), вы не можете создать экземпляр класса и прямой доступ.

Статическое свойство через класс не может быть создан объект для доступа (но статический метод может).

Так как статические методы не требуется для вызова через объект, псевдо-переменная $ это не доступен в статическом методе.

Чтобы получить доступ к оператору> - Статическое свойство не субъектом.

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

<?php
class Foo {
  public static $my_static = 'foo';
  
  public function staticValue() {
     return self::$my_static;
  }
}

print Foo::$my_static . PHP_EOL;
$foo = new Foo();

print $foo->staticValue() . PHP_EOL;
?>	

Вышеприведенная программа, выход:

foo
foo

Окончательный ключевых слов

PHP 5 добавляет окончательное ключевое слово. Если метод родительского класса объявляется окончательным, подкласс не может переопределить этот метод. Если класс объявлен окончательный, он не может быть унаследован.

Следующее сообщение об ошибке выполнения кода:

<?php
class BaseClass {
   public function test() {
       echo "BaseClass::test() called" . PHP_EOL;
   }
   
   final public function moreTesting() {
       echo "BaseClass::moreTesting() called"  . PHP_EOL;
   }
}

class ChildClass extends BaseClass {
   public function moreTesting() {
       echo "ChildClass::moreTesting() called"  . PHP_EOL;
   }
}
// 报错信息 Fatal error: Cannot override final method BaseClass::moreTesting()
?>

Вызвать конструктор родительского класса

PHP не будет автоматически вызывать конструктор родительского класса конструктора в подклассе. Чтобы выполнить конструктор родительского класса, нам нужно вызватьродительский в конструкторе подкласса :: __ конструкта ().

<?php
class BaseClass {
   function __construct() {
       print "BaseClass 类中构造方法" . PHP_EOL;
   }
}
class SubClass extends BaseClass {
   function __construct() {
       parent::__construct();  // 子类构造方法不能自动调用父类的构造方法
       print "SubClass 类中构造方法" . PHP_EOL;
   }
}
class OtherSubClass extends BaseClass {
    // 继承 BaseClass 的构造方法
}

// 调用 BaseClass 构造方法
$obj = new BaseClass();

// 调用 BaseClass、SubClass 构造方法
$obj = new SubClass();

// 调用 BaseClass 构造方法
$obj = new OtherSubClass();
?>

Вышеприведенная программа, выход:

BaseClass 类中构造方法
BaseClass 类中构造方法
SubClass 类中构造方法
BaseClass 类中构造方法