6.7-1php类相关

1. 声明变量不需要任何关键字修饰,但在类中声明成员属性时,变量前一定要有关键字,

例如public ,private ,static等,如果不需要一定的意义,则用“var ” ,

一旦有其他关键字修饰就需要去掉“var”

2. this

访问对象中的成员必须通过对象的引用,如

$person1 -> name ;

$person1 -> run();

用$this 访问对象内部的函数和属性

3.构造方法

每创建一个对象,构造方法就会自动调用一次。"__construct ( ) " ,如果没有,则搜索与类同名的构造方法

function __construct ( [ parameters ] ) {

  

}

作用:即使类声明没有参数 ,也可在构造函数中设置。

4. 对象被销毁前自动运行

function _destruct ( parameter ) {

}

5.私有成员

关键字:private

加上后不能在对象外部访问该变量,如需访问,需要设置公有函数接口,如果不声明,默认就是public

private $name;

public get_name ( ){ return $this->name ;}

6. __set() , __get() , __isset() , __unset()

和__construct() , __destruct()同类的魔术方法,

如__set() ,用于设置private 属性值时自动调用的方法。

6.1

__set ( $propertyName , $propertyValue ) {} ,设置了魔术方法__set ()后,就可以直接为私有属性赋值了,自动调用__set() 方法

6.2

__get( $propertyName){}

可获取私有属性,并设置条件,运行$person->name 时自动调用。设置条件:

if ( $propertyName == "sex" ) return "保密";

6.3

__isset( $propertyName ) , __unset ( $propertyName )

设置特殊情况,不允许访问属性。

设置特殊情况,不允许删除属性。

 7-10.5继承性

1.访问类型控制

2.子类重载父类的方法

用parent:: functionName () 来调用被覆盖父类方法。

8:10.6一些关键字

1. final 关键字

-使用final标识的类,不能被继承

-在类中使用final标识的成员方法,在子类中不能被覆盖

2. static 关键字

声明静态成员属性,则属性是属于所有类的,

static $count ;

在类内:使用  self:: $count   来使用

在类外:使用  类名::$count   来使用

静态方法只能访问静态变量,因为在类加载完成后,静态方法就可以访问了,而此时对象不一定存在,非静态成员也就不一定存在,

this关键字不可使用,而且即使对象创建了,静态方法也不知道访问哪一个对象的成员变量。

9:  10.6.3  单态设计模式

只能创建一个对象的类,

1. 声明__construct () 为private,把默认的创建方法new禁止,

2. 创建一个静态成员来判断类是否已经创建过对象,

//只能使用静态方法getInstance()来获取DB的对象

10.6.4 const关键字

用与将类中的成员变量定义为常量,与static变量一样,

通过类名或在成员方法中使用self关键字访问

10.6.5 instanceof 关键字

确定一个对象是类的实例、类的子类,还是实现了某个接口

10.6.6 克隆对象

有时需要建立对象的一个副本,改变原来的对象不影响副本,

用new重新创建对象再重新赋值,比较麻烦,可以用clone关键字复制出完全相同的实例,

不再需要重新赋值

10.6.7 __toString () 快速获取对象的某些字符串

$p = new Person () 是一个对象的引用。直接用echo输出$p会提示错误

如果在类中添加了__toString ()方法则可以直接返回某些字符。

function __toString () { return $this-> foo ; }

10.6.8 __call() 方法的引用

如果尝试调用对象中不存在的方法,会出现系统报错。可以添加一个__call()方法,

调用不存在的方法时就会自动调用该方法,程序继续执行。

10.6.9 自动加载类

使用全局类__autoload() ,当尝试使用一个没有添加的类时,php自动调用该方法,

添加参数名文件,

function __autoload ( $className ){

  include  ( strtolower ( $className ) . ".class.php" ) ;

}

$obj = new user () ;                  // user类不存在则自动调用__autoload() 函数,将类名user作为参数传入。

10.6.10

对象串行化

1.

对象的寿命通常随着生成该对象的程序的终止而终止,有时需要将对象的状态保存下来,

保存为二进制字符,需要时再恢复。

$person_string = serialize ( $person );

file_put_contents ( "file.txt" , $person_string ) ;

---

$person_string = file_get_contents ( " file.txt " ) ;

$person = unserialize ( $person_string ) ;

$person -> say ();

2.__sleep() 、wakeup() 函数

串行化与恢复时自动调用的两个函数。

_sleep () 函数返回一个数组,包含需要串行化的成员,没有包含的成员在串行化时会被忽略

function __sleep (){

  $arr = array ( "name","age" );

  return $arr;

}

function __wakeup () {

  $this -> age = 40 ;

}

没有参数也没有返回,在重新唤醒时,为新对象的$age 重新赋值。

10.7.1 抽象类

只要声明类时有一个方法是抽象方法,那么这个类就是抽象类。抽象类也要使用abstract关键字修饰

abstract class person {

abstract function say();

}

抽象类不能实例化,用于继承,子类继承抽象类后,就必须将所有抽象方法实现,

否则子类还是抽象类。

10.7.2 接口。

解决单继承问题。 接口是一种特殊的抽象类:接口中声明的方法全是抽象方法。

而且不能在接口中声明变量,只能使用const 声明常量。

接口使用interface标识。

通过类继承接口时需要使用implements 关键字实现,而不是extends,

如果使用抽象类实现接口中的部分方法,也需要使用implements关键字。

可以用抽象类实现接口的部分方法,但要实例化,还需要抽象类有子类把他的所有抽象方法实现。

可以继承多个接口,但必须把所有抽象方法全部实现才能创建实例,可以同时继承一个父类

class 类名 extends 父类 implements 接口1,接口2 ,...,{

  //实现所有方法

}

10.7.3 实现多态

定义一个usb接口,每个usb设备都必须有这个方法

interface usb {

  function run ();

}

class ukey implements usb {

  function run {

    echo "ukey run";  

  }

}

class umouse implements usb {

  function run {

    echo "umouse run";

  }

}

class Computer {

  function useUsb ( $ device ){

    $device->run();  

  }

}

$computer = new Computer ;

computer->useUsb( new usbkey() );

computer->useUsb( new umouse() );

时间: 2024-10-18 14:08:11

6.7-1php类相关的相关文章

Class类相关

Class类是java.lang包中的类,该类的实例可以帮助程序创建其他类的实例或者取得其他类的对象的内部信息 使用class类获得一个类相关的class类(注意得到的是class类,不是相关的类) 比如类名 classFuck类 有类方法(静态方法)public static Class forName(String classFuck)throw ClassNotFoundException 然后我们用Class对象调用以下方法(classFuck必须有一个无参构造函数 public Obj

C#异常类相关总结

C#异常类相关总结 在做异常处理的时候,最好能在应用程序所有的入口处(事件处理函数,主函数,线程入口)使用try-catch. 但是不要在程序构造函数入口处添加try-catch,因为此处产生异常,它自己并没有能力来处理,因为它还没有构造完毕,只能再向外层抛出异常. C#异常类一.基类Exception C#异常类二.常见的异常类 1.SystemException类:该类是System命名空间中所有其他异常类的基类.(建议:公共语言运行时引发的异常通常用此类) 2.ApplicationExc

玩转linux第四天之用户及组管理类相关命令(二)

1    前言 本文档主要介绍用户及组管理类相关命令如:useradd .usermod.passwd.userdel.groupadd.groupmod\gpasswd.groupdel.hage,chsh,chfn,.id,w,who,whoami.wck,gourpck.su,并提供相应案例解释其含义. 学习这些基础命令是一个Linux爱好者需要具备的首要条件,让小编带领你们进入Linux的世界看看它的一颦一笑. 读者对象 本文档(本指南)主要适用于以下人员: Linux爱好者 2    

python类相关总结(持续更新)

__init__ 构造函数 __dict__ vars()函数,获取命名空间里面的名称 __str__ str()函数,输出成员相关信息的内容 __repr__ repl()函数,同样输出信息,在Python内建类的__repr__()返回的字符串是一个有效的表达式,可以使用evel()来产生一个内含值相同的对象 __all__ 在module模块中指定from import *导出的名称 __class__   对象的成员属性之一,可以反着得到类信息 __self__ 通过绑定函数来获取对应对

JDBC工具类相关

第一种(单纯提取注册驱动和获取连接): 把注册驱动,获取连接一起写入工具类静态方法里,并释放资源 1 import java.sql.Connection; 2 import java.sql.DriverManager; 3 import java.sql.PreparedStatement; 4 import java.sql.ResultSet; 5 import java.sql.SQLException; 6 7 /** 8 * 提供获取连接和释放资源的方法 9 * 10 * @aut

与类相关基本概念----Beginning Visual C#

span.kw { color: #007020; font-weight: bold; } code > span.dt { color: #902000; } code > span.dv { color: #40a070; } code > span.bn { color: #40a070; } code > span.fl { color: #40a070; } code > span.ch { color: #4070a0; } code > span.st

C++ 第三十四天:类相关的一些内容

复习 // 以下内容含个人见解 Ⅰ.有时不得不用到“构造函数初始值列表”,原因是有些编译器不支持类内初始值,这样做可以避免在函数体内初始化. 需要注意的是:被初始化列表忽略的数据成员将被默认初始化(结果取决于位置,可能产生可怕后果).下面是构造器的 N 种情况: 程序员直接忽略构造器 --> 产生默认合成的构造函数 --> 成员被默认初始化 --> 不确定的结果. 给数据成员提供初始值(Java 中所谓的属性初始化),不写构造函数 --> 默认合成的构造函数使用提供的初始值初始化对

Haskell学习笔记一:类型和类型类相关内容

内容提要: 静态类型系统: 编译时确定类型错误: 类型推导机制: 基础类型:Int,Integer,Float,Double,Bool,Char: 类型变量: 基础类型类:Eq,Ord,Show,Read,Enum,Bounded,Num,Integral,Floating: Haskell是一门函数式编程语言,被称为最为纯粹的函数式编程语言.Haskell的类型系统非常强大,其中包含了很多有趣.抽象.某种程度上充满学术气息的特质. Haskell属于静态类型语言,这意味着: 每个值或者表达式,

Collection类相关总结

集合类的框架如下: Collection(接口)    List(接口):允许重复.         ArrayList         Vector         LinkedList    Set(接口):不允许重复         HashSet         TreeSet Collection:由于collection是一个接口,不能实例化. collection中的方法(list继承他的方法,因此,以下方法都可以用) add(E e) :往集合里新增一个元素   return 

Java的File类相关知识

Java的File 目录: 1.创建File的文件或者目录的方法.... 2.创建File对象的构造器的三种形式... 3.关于分割符的相关知识...................... 4.file简单Api介绍................................... 1.再说File的时候就不得不先说一下创建文件和目录的三个方法. <1>createNewFile()必须有已经创建好的路径,才能创建一个文件.返回值:如果指定的文件不存在并成功地创建,则返回 true:如果指