【php5权威编程-1】

摘要:
phpclassMyClass{private$id=18;publicfunctiongetId(){return$this-˃id;}}$obj=newMyClass();echo$obj-˃getId();//输出18统一构造函数name__construct()要实现接口,请使用implements运算符。在语言级别,在检查“是-一”关系时,支持最终标记方法。phpclassMyClass{functiongetClass(){return__CLASS__;}finalfunctiongetClass1(){return“this is finalfunction”;}}classMyclass1extendsMyClass{functiongetClass1(){return“thisisextendfinalfunction”;}}$obj=newMyclass1();echo$obj-˃getClass1();//Fatalror:无法覆盖/Applications/MAMP/htdocs/php5/1.phponline15中的finalmethodMyClass::getClass1()强制复制对象为了克隆对象,必须使用clone关键字。PhpclassMyClass{function__construct(){打印“构造方法”;}函数__clone(){打印“clone”;}函数myClass(){print__CLASS__;}}$obj=newMyClass();$obj1=克隆$obj;$obj1-˃myClass();ViewCode类中常量类定义中的常量现在包含常量,并且可以由类˂?phpclassMyClass{staticpublicfunctionhelloWorld(){print“helloworld”;}}MyClass::helloWorld();//helloworldViewCode静态成员类的定义现在包含静态成员(属性),可以通过类本身访问。phpabstractclassMyClass{publicfunction__construct(){print“abstract”;}}classMyclass1extendsMyClass{}$obj=newMyclass1();//AbstractViewCode抽象方法声明方法抽象,以便可以在继承的子类中定义它。

 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()方法,它将在克隆过程中被调用(调用在属性和方法从原对象复制过来以后进行);

【php5权威编程-1】第1张【php5权威编程-1】第2张
<?php

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

    function __clone()
    {
        print "clone";
    }

    function myClass()
    {
        print __CLASS__;
    }
}

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

 类中的常量

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

【php5权威编程-1】第3张【php5权威编程-1】第4张
<?php

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

print MyClass::SUCCESS;
//Success
View Code

静态方法

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

【php5权威编程-1】第5张【php5权威编程-1】第6张
<?php

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

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

静态成员

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

【php5权威编程-1】第7张【php5权威编程-1】第8张
<?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

抽象类

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

【php5权威编程-1】第9张【php5权威编程-1】第10张
<?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
【php5权威编程-1】第11张【php5权威编程-1】第12张
<?php

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

class Myclass1 extends MyClass{

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

抽象方法

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

【php5权威编程-1】第13张【php5权威编程-1】第14张
<?php

abstract class MyClass
{
    abstract public function display()
    {

    }
}

 
View Code

对象类型提示

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

【php5权威编程-1】第15张【php5权威编程-1】第16张
<?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

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

【php5权威编程-1】第17张【php5权威编程-1】第18张
<?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

免责声明:文章转载自《【php5权威编程-1】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇在Android Studio使用ButterKnife的步骤详解MySQL DeadLock故障排查过程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

php Redis函数使用总结(string,hash,list, set , sort set )

  对于:string, set , sort set , hash 的增,改操作,是同一个命令,但是把它当改操作时,及时成功返回值依旧为0 对于:list结构来说,增删改查自有一套方法。   1 <?php 2 /*1.Connection*/ 3 $redis = new Redis(); 4 $redis-...

PHP pdf转png windows版本

链接:https://pan.baidu.com/s/1Bli-2HkucRTYTeujkcsmjg&shfl=sharepset提取码:2une 1.php_imagick扩展    (1)下载php_imagick扩展   下载地址一: http://windows.php.net/downloads/pecl/releases/imagic...

接口幂等性思路

概念 接口幂等性就是用户对于统一操作发起的一次请求或多次请求的结果是一致的,不会因为多次点击而产生了副作用。 哪些场景需要保证接口的幂等性? 用户多次点击按钮。 用户页面回退再次提交 微服务之间相互调用,由于网络波动卡顿,导致feign触发重试机制。 其他情况... 天然幂等情况 以sql为例: 对于select * from table where...

php操作redis和memcache过期时间

php-redis 设置过期时间setTimeOut 命令行expireredis过期时间redis术语里面,把设置了expire time的key 叫做:volatile keys。 意思就是不稳定的key。没有设置过期时间的也就是永久存储 set:set('key','value')将值 value 关联到 key setTimeOut:setTim...

非托管类,身份证接口调用

1.装人口信息系统接口软件 2.程序-人口信息系统接口软件- 右键delphitest 属性 -寻找目标 -开发包-termb.dll、WltRS.dll 考到开发文件debug里 3代码如下: using System.Runtime.InteropServices;using System.Text;  [DllImport("termb.dll",...

UVM_COOKBOOK学习【DUT-Testbench Connections】

关注微信公众号摸鱼范式,后台回复COOKBOOK获取COOKBOOK原本和译本 PDF度盘链接 将testbench连接到DUT 概述 本节,我们主要讨论将UVM testbench连接到RTL DUT的问题。 UVM testbench对象不能直接连接到DUT信号来驱动或采样。driver和monitor组件对象与DUT之间的连接是通过一个或多个具有静态...