Latest web development tutorials
×

PHP curso

PHP curso PHP breve introducción PHP instalar PHP gramática PHP variable PHP echo/print PHP Tipos de datos PHP constante PHP cadena PHP operadores PHP If...Else PHP Switch PHP formación PHP Ordenación de un conjunto PHP superglobals PHP While circulación PHP For circulación PHP función PHP Las variables mágicas PHP Los espacios de nombres PHP Orientado a Objetos

PHP formulario

PHP formulario PHP autenticación de formularios PHP formulario - Los campos necesarios PHP formulario - correo electrónico de verificación y la URL PHP instancia completa formulario PHP $_GET variable PHP $_POST variable

PHP Tutorial avanzado

PHP Las matrices multidimensionales PHP fecha PHP contener PHP expediente PHP Cargar archivo PHP Cookie PHP Session PHP E-mail PHP seguridad E-mail PHP Error PHP Exception PHP filtro PHP filtro avanzado PHP JSON

PHP 7 nuevas características

PHP 7 nuevas características

PHP base de datos

PHP MySQL breve introducción PHP MySQL conexión PHP MySQL La creación de una base de datos PHP MySQL Crear una tabla de datos PHP MySQL insertar datos PHP MySQL Insertar datos múltiples PHP MySQL Sentencias preparadas PHP MySQL leer datos 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 breve introducción AJAX PHP AJAX base de datos AJAX XML AJAX búsqueda en tiempo real AJAX RSS Reader AJAX voto

PHP Manual de referencia

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 Procesamiento de imágenes PHP RESTful

PHP Orientado a Objetos

En la programación orientada a objetos (Inglés: Programación orientada a objetos, Abreviatura: programación orientada a objetos), el objeto es una descripción del procesamiento de la información y la información que consiste en un conjunto, es la abstracción real mundo.

Las cosas son objetos en el mundo real que nos enfrentamos, tales como computadoras, televisores, bicicletas.

Tres características principales del objeto:

  • Comportamiento del objeto: un objeto que se puede aplicar a la operación, encender las luces, apagar las luces es el comportamiento.
  • objeto de formulario: Al aplicar esos métodos es el de responder al objeto, color, tamaño, forma.
  • Representación del objeto: un objeto que representa el equivalente de identidad, distinguir específicamente lo que es diferente en el mismo comportamiento y el estado.

Por ejemplo, animal (animal) es una clase abstracta, que puede ser específico de una oveja con un perro, y el perro con las ovejas es un objetivo específico, tienen un atributo de color, puede escribir, puede ejecutar otros actos de estado.


contenido orientado a objetos

  • Clase - define las características abstractas de una cosa.definición de clase contiene los datos del formulario y las operaciones sobre los datos.

  • Objetos - es una instancia de la clase.

  • Las variables de miembro - variables definidas dentro de la clase.El valor externo de la variable no es visible, pero se puede acceder a las funciones miembro, después de la clase se inicia como un objeto, las propiedades del objeto puede ser llamado una variable.

  • función miembro - definido dentro de la clase puede ser utilizado para objetos de acceso a datos.

  • Herencia - La herencia es una subclase de intercambio automático de las estructuras y métodos de la clase del padre, que es una relación entre las clases de datos.En la definición e implementación de una clase, que pueden venir en una base tal existe ya realizado, esta clase ya existente como se define por el contenido de su contenido, y añadir nuevos contenidos.

  • clase padre - una clase heredada por otras clases, la clase puede ser llamada la clase, grupo de padres o clases, o superclase.

  • Subclase - una clase que hereda de otra clase que se llama una subclase también se puede llamar una clase derivada.

  • Polimorfismo - El polimorfismo se refiere a la misma operación o función, el proceso puede ser aplicado a los varios tipos de objetos y obtener resultados diferentes.Diferentes objetos, que reciben el mismo mensaje puede producir diferentes resultados, este fenómeno se conoce como polimorfismo.

  • Sobrecarga - resumen, se trata de una función o un método con el mismo nombre, pero la lista de parámetros no es la misma situación, tal función o método entre los diferentes parámetros del mismo nombre, cada función o método sobrecargado se llama.

  • Resumen - El resumen hace referencia a que tiene una estructura coherente de datos (atributos) y comportamiento (operaciones) de los objetos en clases.Esa clase es una abstracción, que refleja las propiedades importantes asociados con la aplicación, sin tener en cuenta otro tipo de contenido relacionado. Cualquier división de clases es subjetiva, sino que debe estar relacionado con la aplicación específica.

  • Package - paquete se refiere a las propiedades y existe comportamiento de un objeto en el mundo real para unir y se coloca en una unidad lógica.

  • Constructor - usado principalmente para inicializar el objeto cuando se crea un objeto, el objeto se le asigna un valor inicial de la variable miembro, siempre utilice la sentencia de creación de objetos con el nuevo operador.

  • Destructor - destructor (destructor) y el constructor En contraste, cuando el extremo objeto de su ciclo de vida (por ejemplo, donde el objeto es que se complete una llamada de función), el sistema realiza automáticamente destructor.Los destructores se utilizan a menudo para hacer "limpiar las secuelas de" trabajo (por ejemplo, cuando se crea un objeto con una nueva abrió un espacio de memoria se debe utilizar antes de salir en el destructor eliminar la liberación).

En la siguiente figura se crea tres objetos de clase Coche: Mercedes, BMW, y Audi.

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


definición de la clase PHP

clases personalizadas PHP generalmente sintaxis es la siguiente:

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

Interpretarse de la siguiente manera:

  • Después de la clase mediantela palabra clave classmás el nombre de la definición de clase.

  • Un par de llaves después de que el nombre de la clase puede definir variables y métodos ({}) en el interior.

  • Las variables de clase utilizandovar para declarar variables también se pueden inicializar los valores.

  • PHP definición de función es similar a la definición de la función, pero la función sólo se puede acceder a través de la clase y sus objetos instanciados.

Ejemplos

<?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;
  }
}
?>

$ Esta variable representa sus objetos.

PHP_EOL de nueva línea.


PHP para crear objetos

Una vez creada la clase, podemos utilizar el operadornew para crear un objeto de la clase:

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

El código anterior creamos tres objetos, cada uno de los tres objetos son independientes, entonces nos fijamos en la forma de acceder a los métodos y variables miembro miembros.

Llama al método miembro

Después se crea una instancia del objeto, podemos usar el objeto para llamar a un método de la barra, el método del objeto sólo puede ser un miembro de la variable miembro operativo del objeto:

// 调用成员函数,设置标题和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();

El código completo es el siguiente:

Ejemplos

<? Php
Sitio de clase {
/ * * Las variables de miembro /
var $ url;
var $ titulo;

/ * La función de miembro * /
setURL función ($ par) {
$ This -> url = $ par ;
}

la función getURL () {
. Echo $ this -> url PHP_EOL ;
}

setTitle función ($ par) {
$ This -> title = $ par ;
}

getTitle funcionar () {
echo $ this -> PHP_EOL título. ;
}
}

$ W3big = nuevo Sitio;
Taobao $ = nuevo Sitio;
Google $ = nuevo Sitio;

// Función miembro está llamado a establecer el título y la URL
$ W3big -> setTitle ( "tutorial");
$ Taobao -> setTitle ( "Taobao");
$ Google -> setTitle ( "Google Search");

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

// Llamar a la función miembro para obtener el título y la URL
$ W3big -> getTitle ();
$ Taobao -> getTitle ();
$ Google -> getTitle ();

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

Instancia en ejecución »

Aplicación del código anterior, la salida es:

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

PHP Constructor

Constructor es un método especial. Se utiliza principalmente para inicializar el objeto cuando se crea un objeto, el objeto se le asigna un valor inicial de la variable miembro, siempre usar la sentencia de creación de objetos con el nuevo operador.

PHP 5 permite a los desarrolladores para definir una fila método en una clase como una sintaxis constructor es la siguiente:

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

En el ejemplo anterior, podemos inicializar la URL y $ $ variable de título a través del constructor:

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

Ahora no es necesario llamar al método y setTitle setURL:

Ejemplos

$ W3big = nuevo Sitio ( 'www.w3big.com ', ' tutorial');
Taobao $ = nuevo Sitio ( 'www.taobao.com ', ' Taobao');
Google $ = nuevo Sitio ( 'www.google.com ', 'Google búsqueda');

// Llamar a la función miembro para obtener el título y la URL
$ W3big-> getTitle ();
$ Taobao-> getTitle ();
$ Google-> getTitle ();

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

Instancia en ejecución »

destructor

Destructor (destructor) y el constructor En contraste, cuando el extremo objeto de su ciclo de vida (por ejemplo, donde el objeto es que se complete una llamada de función), el sistema realiza automáticamente destructor.

PHP 5 introduce el concepto de un destructor, que es similar a otros lenguajes orientados a objetos, la sintaxis es la siguiente:

void __destruct ( void )

Ejemplos

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

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

$obj = new MyDestructableClass();
?>

Aplicación del código anterior, la salida es:

构造函数
销毁 MyDestructableClass

heredar

PHPse extiende palabra clave para heredar una clase, PHP no soporta la herencia múltiple, en el siguiente formato:

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

Ejemplos

Ejemplo Child_Site clase hereda la clase del sitio, y se extiende la funcionalidad:

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

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

sustituye el método

Si no puede satisfacer las necesidades de una subclase hereda del método de la clase padre, puede ser reescrito, un proceso llamado método de superposición (anulación), también conocido como el método de alteración temporal.

Ejemplo reescrito getUrl y getTitle métodos:

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

control de Acceso

PHP en la propiedad o método de control de acceso se logra mediante la adición de palabras clave frente al público (público), protegido (protegido) o privada (privada) de lograr.

  • pública (Public): miembro de la clase pública se puede acceder en cualquier lugar.
  • protegido (protegido): miembro de la clase protegida se puede acceder por su cuenta, así como sus sub-clase y la clase padre.
  • (Privado) privada: miembros de la clase privada sólo se puede acceder en la definición de clase.

atributos de control de acceso

atributo de la clase debe ser definido como protegido, una pública y privada. Si se define con la var, se considera pública.

<?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

?>

métodos de control de acceso

Método de la clase puede ser definida como pública, privada o protegida. Si no establece estas palabras clave, los valores por defecto método para público.

<?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
?>

interfaz

El uso de la interfaz (interfaz), puede especificar los métodos de una clase debe implementar, pero no es necesario para definir el contenido específico de estos métodos.

La interfaz está definida porla palabra clave de la interfaz,como la definición de una clase estándar, pero que define todos los métodos están vacíos.

Todos los métodos definidos en la interfaz deben ser públicas, que es característica de la interfaz.

Para implementar una interfaz, utilice el operador deimplementos.La clase debe implementar todos los métodos definidos en una interfaz, o de lo contrario va a informar de un error grave. Clase puede implementar múltiples interfaces, utilice comas para separar los nombres de múltiples interfaces.

<?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;
    }
}

constante

Usted puede poner en la clase sigue siendo los mismos valores definidos como constantes. En la definición y el uso de las constantes de tiempo no es necesario para utilizar el símbolo $.

El valor de la constante debe ser un valor fijo, no una variable, los atributos de clase, los resultados de matemáticas o la llamada a la función.

A partir de PHP 5.3.0 en adelante, se puede usar una variable para llamar de forma dinámica la clase. Pero el valor de la variable no puede ser una palabra clave (por ejemplo, auto, padre o estática).

Ejemplos

<?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 起
?>

clase abstracta

Cualquier clase, si contiene al menos un método se declara abstracto, entonces esta clase debe ser declarado como abstracto.

Se define como una clase abstracta no puede ser instanciada.

Se define como un método abstracto sólo declara su invocación (parámetros), no se puede definir la implementación de la función específica.

Heredar una clase abstracta, subclase debe todos los padres de clase definiciones abstractas de método y, además, el acceso a estos métodos de control y la clase de los padres debe ser el mismo que (o más relajado). Por ejemplo, un método abstracto es declarado protegido, entonces el método implementado en la subclase debe ser declarada como protegida o pública, pero no se puede definir como privado. También se llama por el método debe coincidir, es decir el tipo y número de parámetros necesarios deben ser consistentes. Por ejemplo, una subclase define un parámetro opcional, y la declaración del método abstracto clase padre no existe, entonces no hay conflicto entre los dos estados.

<?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;
?>

Aplicación del código anterior, la salida es:

ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2

Palabra clave estática

Declarar propiedades de clase o métodos como static (estática), no se puede crear una instancia de la clase y acceso directo.

Propiedad estática a través de una clase no se pueden crear instancias de objetos de acceso (pero puedo método estático).

Debido a que los métodos estáticos no están obligados a llamar a través del objeto, la pseudo-variable $ ésta no está disponible en un método estático.

Para acceder al operador> - Propiedad estática no por el sujeto.

A partir de PHP 5.3.0 en adelante, se puede usar una variable para llamar de forma dinámica la clase. Pero el valor de la variable no puede ser un auto palabra clave, padre o estática.

<?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;
?>	

El programa anterior, la salida es:

foo
foo

Palabra clave definitiva

PHP 5 añade una palabra clave final. Si el método de la clase padre se declara definitiva, la subclase no puede reemplazar este método. Si una clase se declara definitiva, no se puede heredar.

El siguiente error de ejecución de código:

<?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()
?>

Llamar al constructor de la clase padre

PHP no llama automáticamente al constructor del constructor de la clase padre en la subclase. Para ejecutar el constructor de la clase padre, tenemos que llamar a lospadres en el constructor de la subclase :: __ construct ().

<?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();
?>

El programa anterior, la salida es:

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