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의 객체 지향

(: 객체 지향 프로그래밍 약어 : 영어 OOP) 객체 지향 프로그래밍에서 객체가 완전히 이루어진 정보와 정보 처리에 대한 설명이며, 실제 추상화이다.

상황이 컴퓨터, 텔레비전, 자전거 등 우리가 직면 한 현실 세계의 객체이다.

객체의 세 가지 특성 :

  • 개체의 동작 : 동작에 적용 할 수있는 개체, 조명을 켜 불을 끄고는 동작입니다.
  • 폼 개체 : 이러한 방법을 적용 할 경우 오브젝트, 컬러, 크기, 형상에 대응하는 방법이다.
  • 객체의 표현 : 신원의 등가를 나타내는 객체, 즉 동일한 동작 및 상태는 다른 어떤 구별.

예를 들어,이 컬러 특성이, 동물 (동물) 추상 클래스, 우리는 강아지와 양에 특정 될 수 있으며, 양을 가진 개는 특정 목표, 당신은 당신이 국가의 다른 행위를 실행할 수 있습니다, 쓸 수 있습니다.


객체 지향의 콘텐츠

  • 클래스 - 일의 추상적 인 특성을 정의합니다.클래스 정의는 데이터의 양식 데이터 및 작업이 포함되어 있습니다.

  • 객체 - 클래스의 인스턴스이다.

  • 멤버 변수 - 클래스 내에서 정의 된 변수.변수의 외부 값은 표시되지 않지만, 클래스 객체로, 객체의 속성은 변수라고 할 수있다 인스턴스화 이후 멤버 함수에 액세스 할 수있다.

  • 멤버 함수 - 클래스 내에 정의 된 데이터 액세스 개체에 사용될 수있다.

  • 상속 - 상속은 데이터 구조와 클래스 사이의 관계 부모 클래스의 방법 중 자동 공유의 서브 클래스입니다.정의 및 클래스 구현에서, 이들은 이미 수행, 콘텐츠의 내용에 의해 정의 된 바와 같이,이 기존의 클래스가 새로운 컨텐츠를 추가 존재 같은 기초로 제공 할 수있다.

  • 상위 클래스 - 다른 클래스에 의해 상속 클래스는 클래스는 부모 클래스, 그룹 또는 클래스 또는 수퍼 클래스라고 할 수있다.

  • 서브 클래스 - 서브 클래스라고하는 다른 클래스를 상속하는 클래스는 파생 클래스를 호출 할 수 있습니다.

  • 다형성 - 다형성은 동일한 작용 또는 기능을 말한다, 처리 대상의 여러 유형에 적용하고 다른 결과를 얻을 수있다.다른 개체는,이 현상은 다형성 (polymorphism)이라고, 같은 메시지가 다른 결과를 생성 할 수있다받을 수 있습니다.

  • 오버 - 짧은, 그것은 동일한 이름의 함수 또는 방법이지만 파라미터리스트는 같은 이름의 다른 파라미터와 같은 상황 같은 함수 또는 메소드 아닌 각각 과부하 함수 나 메소드가 호출된다.

  • 초록 - 추상 클래스로 객체의 일관성있는 데이터 구조 (특성)과 행동 (작업)을 갖는을 의미한다.이러한 클래스는 다른 관련이없는 내용을 무시하고, 응용 프로그램과 관련된 중요한 특성을 반영, 추상화이다. 모든 클래스 분할 주관적이지만, 특정 애플리케이션에 관련되어야한다.

  • 패키지 - 패키지 속성과 현실 세계에서 개체의 행동이 함께하고 논리 단위에 배치 결합하는 존재를 의미한다.

  • 생성자 - 주로 객체를 생성 할 때 객체를 초기화하는 데 사용되는 개체는 항상 새로운 연산자로 객체 생성 문을 사용하여 멤버 변수의 초기 값이 할당됩니다.

  • 소멸자 - 소멸자 (소멸)과주기의 오브젝트 단부 (객체는 함수 호출이 완료된 예를위한) 시스템이 자동 소멸을 수행 이에 생성자.소멸자는 종종 확인 (새 메모리 공간을 열어 당신이 릴리스를 삭제 소멸자에 종료하기 전에 사용되어야하는 객체를 생성 할 때, 예를 들어) 작업 "의 여파를 정리"하는 데 사용됩니다.

다음 그림 우리는 세 개의 개체 자동차 클래스를 만들 : 메르세데스와 BMW, 아우디을.

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


PHP 클래스 정의

다음과 같이 PHP 사용자 정의 클래스는 보통 구문은 다음과 같습니다

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

다음과 같이 해석 :

  • class 키워드 플러스 클래스 정의의 이름을 사용하여 클래스 후.

  • 클래스의 이름 뒤에 괄호 한 쌍의 변수와 메소드 ({}) 내부를 정의 할 수 있습니다.

  • 변수를 선언VAR를 사용하여 클래스 변수는 값을 초기화 할 수 있습니다.

  • 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

클래스를 만든 후, 우리는 클래스의 객체를 인스턴스화하는new 연산자를 사용할 수 있습니다 :

$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에
클래스 사이트 {
/ * * 회원 변수 /
var에 $의 URL;
var에 $ 제목;

/ * 회원 기능 * /
기능 setUrl ($ 파) {
> URL = $ 파 -이 $ ;
}

함수의 getURL () {
. $이 에코 ->의 URL PHP_EOL을 ;
}

기능 setTitle이라는 ($ 파) {
$이 -> 제목 = $ 파 ;
}

() {인 getTitle를 작동
> 제목 PHP_EOL - $이 에코. ;
}
}

$ w3big = 새로운 사이트;
$의 Taobao의 = 새로운 사이트;
$ 구글 = 새로운 사이트;

// 회원 기능은 제목과 URL을 설정하기 위해 호출됩니다
$ w3big -> setTitle이라는 ( "튜토리얼");
$의 Taobao의 -> setTitle이라는 ( "Taobao의");
$ 구글 -> setTitle이라는 ( "구글 검색");

$ w3big -> setUrl ( 'www.w3big.com ');
$의 Taobao의 -> setUrl ( 'www.taobao.com ');
$ 구글 -> setUrl ( 'www.google.com ');

// 제목과 URL을 얻기 위해 멤버 함수 호출
$ w3big -> 인 getTitle ();
$의 Taobao의 -> 인 getTitle ();
$ 구글 -> 인 getTitle ();

$ w3big ->의 getURL ();
$의 Taobao의 ->의 getURL ();
$ 구글 ->의 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의');
$ 구글 = 새로운 사이트 ( 'www.google.com ', '구글 검색');

// 제목과 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;
	}
}

메소드의 오버라이드 (override)

하위 클래스는 상위 클래스에서 상속의 방법은 요구 사항을 충족 할 수없는 경우에는,도 겹쳐 방법으로 공지 오버레이 방식 (오버라이드)이라는 프로세스를 재 기입 할 수있다.

예를 재 작성의 getURL 및 인 getTitle 방법 :

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

액세스 제어

액세스 컨트롤의 속성 또는 메서드에 PHP 보호 (공개) 대중 앞에 키워드를 추가함으로써 달성된다 (보호) 또는 달성하기 위해 개인 (개인).

  • 공공 (공용) : 공용 클래스 멤버 어디서나 액세스 할 수 있습니다.
  • 보호 (보호) : 보호 클래스 멤버는 자신뿐만 아니라 하위 클래스와 부모 클래스에 액세스 할 수 있습니다.
  • 개인 (개인) : 개인 클래스 멤버 만 액세스 할 수있는 클래스 정의.

액세스 제어 특성

클래스 속성은 공공, 보호, 개인 하나로 정의해야합니다. var에 정의 된 경우는 공용 여겨진다.

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

정적 키워드

(정적) 정적으로 클래스의 속성이나 메서드를 선언하면 클래스와 직접 액세스를 인스턴스화 할 수 없습니다.

클래스를 통해 정적 속성 액세스 개체를 인스턴스화 할 수없는 (그러나 정적 메서드가 있습니다).

정적 메소드는 객체를 통해 호출 할 필요가되지 않기 때문에,이 의사 변수 $는 정적 메서드에서 사용할 수 없습니다.

피사체가없는 정적 속성 ->을 운영자에 액세스 할 수 있습니다.

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는 최종 키워드를 추가합니다. 부모 클래스의 메소드가 최종 선언 된 경우, 서브 클래스는이 메소드를 오버라이드 (override) 할 수 없습니다. 클래스가 마지막으로 선언되면, 상속 될 수 없다.

다음 코드 실행 오류 :

<?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 类中构造方法