【php5权威编程-1】

 public/private/protected 访问修饰符,针对对象中的方法和属性。

<?php

class MyClass
{
    private $id = 18;

    public function getId()
    {
        return $this->id;
    }
}
$obj =  new MyClass();
echo $obj->getId();
//输出 18

 统一的构造函数名称 __construct()。

为避免构造函数的名字和类的名字相同,现在用__construct()来声明,从而让你更加容易在类的分层中转移类

 通过__destruct()定义对象的析构方法 。

允许定义一个析构函数来注销一个对象。

 接口。

一个使用接口的类可以加载不止一个相关的接口,一个类只能继承来自另外一个类,但是可以实现任意多个接口。

使用接口,可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容,接口是通过interface关键字来定义的,就像一个标准的类一样,但其中定义所有的方法都是空的。接口中定义的所有方法都必须是公有的,这是接口的特性。需要注意的是,在接口中定义一个构造函数是被允许的,在有些场景析这可能会很有用,例如工厂模式。

实现(implements) 要实现一个接口,使用implements操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称

note:接口也可以继承,通过extends操作符

note:类要实现接口,必须使用和接口中定义的方法完全一直的方式,否则会导致致命错误

常量 const 接口中也可以定义常量,接口常量和类常量的使用完全相同,但是不能被子类或子接口所覆盖。

<?php

 interface Display{
     const VALUE_A = 'Dispaly A';//类常量
     function display();
 }
 interface ShowIng{
      function show();
 }
 interface Runner extends ShowIng { //接口继承
     function runner();
 }
 class Circle implements Runner,Display { //类实现多个接口

    function display()
    {
        return "display";
    }
    function show()
    {

    }
    function runner()
    {
    }
 }
echo Circle::VALUE_A;
//输出 Dispaly A

instanceof 操作符。

在语言这个级别对你检查“是一”关系时做支持

final标记方法。

final关键字允许你用来标识方法,使其不能被子类重载

final标记类。

声明一个类为final类型后,它将不能被继承。

<?php
final class MyClass{
    function getClass(){
        return __CLASS__;
    }
}
class Myclass1 extends MyClass{

}
$obj =new  Myclass1();
echo $obj->getClass();
//Fatal error: Class Myclass1 may not inherit from final class (MyClass) in /Applications/MAMP/htdocs/php5/1.php on line 9
<?php

class MyClass
{
    function getClass()
    {
        return __CLASS__;
    }

    final function getClass1()
    {
        return "this is final function";
    }
}

class Myclass1 extends MyClass
{
    function getClass1()
    {
        return "this is extend final function";

    }
}

$obj = new  Myclass1();
echo $obj->getClass1();
//Fatal error: Cannot override final method MyClass::getClass1() in /Applications/MAMP/htdocs/php5/1.php on line 15

 强制复制对象

为了克隆一个对象,你必须使用clone关键字。你可以在类中声明一个__clone()方法,它将在克隆过程中被调用(调用在属性和方法从原对象复制过来以后进行);

<?php

class MyClass
{
    function __construct()
    {
        print "构造方法";
    }

    function __clone()
    {
        print "clone";
    }

    function myClass()
    {
        print __CLASS__;
    }
}

$obj = new MyClass();
$obj1 = clone $obj;
$obj1->myClass();
View Code

 类中的常量

类定义中的现在包含常量,而且可以用类来引用

<?php

class MyClass
{
    const SUCCESS = "Success";
    const FAILURE = "Error";
}

print MyClass::SUCCESS;
//Success
View Code

静态方法

你现在可以定义静态方法,不用实例化就能使用它们。静态方法不支持$this变量,因为它们并没有绑定到任何具体的对象

<?php

class MyClass
{
    static public function helloWorld()
    {
        print "hello world";
    }
}

MyClass::helloWorld();
//hello world
View Code

静态成员

类的定义现在包含静态成员(属性),可以通过类自身来访问。

<?php

class MyClass
{
    static public $user = NULL;

    static public function setUser($user = 'hi')
    {
        self::$user = $user;
    }

    static public function getUser()
    {

        print self::$user;
    }
}

MyClass::setUser('userinfo');
MyClass::getUser();
//userinfo
View Code

抽象类

把类声明为抽象类可以防止它被实例化,但是你可以继承一个抽象类。

<?php

abstract class MyClass
{
    public function __construct()
    {
        print "abstract";
    }
}

$obj = new MyClass();
// Fatal error: Cannot instantiate abstract class MyClass in /Applications/MAMP/htdocs/php5/1.php on line 11
View Code
<?php

abstract class MyClass
{
    public function __construct()
    {
        print "abstract";
    }
}

class Myclass1 extends MyClass{

}
$obj = new Myclass1();
//abstract
View Code

抽象方法

把方法声明为抽象的,以便于在继承的子类中再去定义。包含抽象方法的类本身必须是一个抽象类。

<?php

abstract class MyClass
{
    abstract public function display()
    {

    }
}

 
View Code

对象类型提示

函数声明中可以对参数进行对象类型提示。如果函数调用的时候没有传递正确的对象类型,系统报错

<?php

class Myclass
{
    public function display()
    {

        print __CLASS__ . "--display method";
    }
}

class Myclass1
{
    public function display()
    {
        print __CLASS__ . "--display method";
    }
}

class Myclass2
{
    public function display(Myclass1 $obj)
    {
        $obj->display();
    }
}

$myClassObj = new Myclass();
$myClassObj1 = new Myclass1();
$myClassObj2 = new Myclass2();
$myClassObj2->display($myClassObj);
//Catchable fatal error: Argument 1 passed to Myclass2::display() must be an instance of Myclass1, instance of Myclass given, called in /Applications/MAMP/htdocs/php5/1.php on line 31 and defined in /Applications/MAMP/htdocs/php5/1.php on line 22
//此处应该传入 $myClassObj1 
View Code

支持连续引用方法返回的对象

<?php

class Myclass
{
    public function show()
    {

        print __CLASS__ . "--show method";
    }

}
class Myclass1
{
    public function display()
    {
        $obj = new Myclass();
        return $obj;
    }
}
$obj = new Myclass1();
$obj->display()->show();
View Code
原文地址:https://www.cnblogs.com/aln0825/p/14100632.html