只记录区别,一致的地方不记录
【类对象】
1、属性和方法的引用:
python 不管是类引用还是实例引用,都是标准语法: obj.name 或 obj.method();
php 类的静态属性(或常量)引用:class::name ,类的静态方法引用:class::method();
实例属性引用 $obj->name,实例的方法引用:$obj->method();
2、构造方法
python 的构造方法名是 __init__(self)
def __init__(self):
self.data = []
注意:类方法里面的第一个参数只能是实例对象,但不限定变量名。所以 self 是指类的实例,self 只是个变量,可以使用 this 等自定义的变量。
php 的构造方法是 __construct() ,且可以不传入任何参数
3、析构方法
python 的析构方法是 __del__(self)
php 的析构方法是 __destruct()
4、类的静态变量引用
python 无静态变量,如果要外部引用直接 class.attr 引用;
内部引用,需要 self.attr 引用。
php 有静态变量和常量,内部引用:static::attr 或 self::attr
实例属性外部引用:$obj->attr;内部引用:$this->attr
【类方法】
1、类方法定义
python 使用 def 关键词定义,与定义函数一样。
php 使用 function 关键词定义。
2、定义方法必须传入类实例作为第一个参数
python 类方法必须包含“类实例”参数 self(self 可以自己定义其他名字)
php 无此规则,且方法内使用 $this 调用类实例。
【继承】
1、继承方式
python 继承: class child(base),使用圆括号方式
php 继承:class child extend base 使用关键词:extend
2、多继承
python 支持多继承,且根据圆括号里面父类的顺序查找父类里面的方法:class child(base, base2, base3)
php 不支持多继承
【方法重写】
1、引入父类方法区别
python 使用 super() 类获得父类对象:super(Child, c).method();
php 直接使用 parent::method() 即可;
【类属性/方法权限】
1、类属性的私有声明
python 使用两个下划线开头(__)声明该属性是私有的。内部使用 self.__private_attr 访问;
php 使用 private $attr 声明私有属性。
2、类方法的私有化声明
python 两个下划线开头定义方法名声明私有方法:def __private_method(self);
php 使用 private menthod() 声明私有方法;
3、proteced 权限
python 无此权限
php 通过 protected 声明;
【类的专有方法】
python 有以下专用类方法:
__init__ : 构造函数,在生成对象时调用
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__truediv__: 除运算
__mod__: 求余运算
__pow__: 乘方
php 有以下专用类方法,也称为魔术方法:
•__construct(),类的构造函数
•__destruct(),类的析构函数
•__call(),在对象中调用一个不可访问方法时调用
•__callStatic(),用静态方式中调用一个不可访问方法时调用
•__get(),获得一个类的成员变量时调用
•__set(),设置一个类的成员变量时调用
•__isset(),当对不可访问属性调用isset()或empty()时调用
•__unset(),当对不可访问属性调用unset()时被调用。
•__sleep(),执行serialize()时,先会调用这个函数
•__wakeup(),执行unserialize()时,先会调用这个函数
•__toString(),类被当成字符串时的回应方法
•__invoke(),调用函数的方式调用一个对象时的回应方法
•__set_state(),调用var_export()导出类时,此静态方法会被调用。
•__clone(),当对象复制完成时调用
•__autoload(),尝试加载未定义的类
•__debugInfo(),打印所需调试信息