zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    RDS 工作笔记
    网站测试需要提供的参数和结果分析
    php 安全编程
    留住青春的格子
    保持工作精力旺盛的方法
    百万格子的标签认领可以提高你在alexa的排名的格子
    老电影,似水流年的记忆
    五行 八字 计算
    iis6.0 的 性能比较
    各种情绪和调节方法
  • 原文地址:https://www.cnblogs.com/aln0825/p/14100632.html
Copyright © 2011-2022 走看看