-
子类中编写跟父类方法名完全一致的方法可以完成对父类方法的重写(overwrite)
对于不想被任何类继承的类可以在class之前添加final关键字
对于不想被子类重写的方法,可以在方法定义的前面添加final关键字
即使方法被重写了,仍然可以用parent调用父类的该名称的方法
查看全部 -
静态属性用于保存类的公有数据
静态方法里面只能访问静态属性
静态成员不需要实例化对象就可以访问
类内访问当前类的静态成员用self/static关键字,子类访问父类的静态成员用parent关键字
类外可以用类名访问类的静态成员(包括静态属性和静态方法)
$this在类里面代指当前对象
查看全部 -
php的extends只能继承一个类,即为php的单继承原则
查看全部 -
为什么使用面向对象
查看全部 -
接口查看全部
-
abstract 关键字定义类,即为抽象类。
抽象类中使用abstract定义声明一个方法,即为抽象方法,不需要具体实现。但在子类中需要实现。若方法没有abstract定义,则需要具体实现。
查看全部 -
三大特性:封装、继承、多态。
多态:一个接口可以被多个类实现,也可以被多个接口继承。并且接口里定义的方法,被实现的方式不一样。则为多态。
查看全部 -
1、parent关键字可以调用父类中的方法。即使是被子类重写了。
2、self关键字可以调用类自身的成员变量和方法,不管是静态成员或者类常量(const CONST_VALUE=“”)
3、static关键字用于访问类自身的静态成员。
查看全部 -
final 关键字,让方法不允许被重写,让类不允许被继承。
查看全部 -
关键字:
public:公共;protected:受保护的;private:私有的。public:哪里有可以访问的到。
protected:只能在自身类中,或被继承的子类中访问。
private:只能在自身类中访问,假如在外部一定要访问,则在类中申明一个方法返回属性。
以上关键字声明的属性或方法,都是用$this->访问。
查看全部 -
static关键字可用于声明属性或方法为静态成员。
1、用static关键字,在类内部访问,用self或static加::即可访问;如子类要访问,则使用parent加::访问。访问属性时需注意要加上$符号。
2、静态成员不需要实例化即可访问,则类名::静态成员名即可
3、静态成员是用于保存类的共有数据。
查看全部 -
<?php
class NbaPlayer{
public $name;
function __clone(){
$this->name='TBD';
}
}
$james=new NbaPlayer();
$james->name='james'."\n";
echo $james->name;
$james2=clone $james;
echo "Before set up jame2s's:".$james2->name."\n";
$james2->name='james2';
echo "james's:".$james->name."\n";
echo "james2's:".$james2->name."\n";
?>
__clone比较常用,用于对一个对象操作,但不想影响原有数据时。
查看全部 -
<?php
class MagicTest{
//__tostring会在把对象转换为string时自动调用
public function __tostring(){
return "This is the class MagicTest";
}
//__invoke会把在对象当做一个方法的时候自动调用
public function __invoke($x){
echo "_invoke called with parameter ".$x."\n";
}
//方法的重载
//这个方法的参数第一个就是调用的方法的名称,第二个参数是方法调用的参数组成的数组
public function __call($name,$arguments){
echo "calling ".$name." with parament:".implode(",",$arguments)."\n";
}
//静态方法的重载,需要将这个方法设定成static
public static function __callStatic($name,$arguments){
echo "calling static ".$name. " with parament:".implode(",",$arguments)."\n";
}
//属性承载
public function __get($name){
return "getting the property ".$name;
}
public function __set($name,$value){
echo "setting the property".$name." to value".$value."\n";
}
public function __isset($name){
echo "__isset invoked\n";
return false;
}
public function __unset($name){
echo "unsetting property ".$name."\n";
}
}
$obj=new MagicTest();
// echo $obj."\n";
// $obj(5);
// $obj->runTest("para1","para2");
// //静态调用
// MagicTest::runTest("para1","para2");
echo $obj->ClassName."\n";
$obj->ClassName='magicClassX';
echo '$obj->ClassName is set?'.isset($obj->ClassName)."\n";
echo '$obj->ClassName is empty?'.empty($obj->ClassName)."\n";
unset($obj->ClassName);
?>
通过__get __set __isset __unset这四个魔术方法我们可以对没有被的类进行操作
查看全部 -
<?php
class MagicTest{
//__tostring会在把对象转换为string时自动调用
public function __tostring(){
return "This is the class MagicTest";
}
//__invoke会把在对象当做一个方法的时候自动调用
public function __invoke($x){
echo "_invoke called with parameter ".$x."\n";
}
//方法的重载
//这个方法的参数第一个就是调用的方法的名称,第二个参数是方法调用的参数组成的数组
public function __call($name,$arguments){
echo "calling ".$name." with parament:".implode(",",$arguments)."\n";
}
//静态方法的重载,需要将这个方法设定成static
public static function __callStatic($name,$arguments){
echo "calling static ".$name. " with parament:".implode(",",$arguments)."\n";
}
public function __get($name){
return "getting the property ".$name;
}
public function __set($name,$value){
echo "setting the property".$name." to value".$value."\n";
}
}
$obj=new MagicTest();
// echo $obj."\n";
// $obj(5);
// $obj->runTest("para1","para2");
// //静态调用
// MagicTest::runTest("para1","para2");
echo $obj->ClassName."\n";
$obj->ClassName='magicClassX';
?>
使用一个类库时,可以使用__get来获取某个方法
查看全部 -
<?php
class MagicTest{
//__tostring会在把对象转换为string时自动调用
public function __tostring(){
return "This is the class MagicTest";
}
//__invoke会把在对象当做一个方法的时候自动调用
public function __invoke($x){
echo "_invoke called with parameter ".$x."\n";
}
//方法的重载
//这个方法的参数第一个就是调用的方法的名称,第二个参数是方法调用的参数组成的数组
public function __call($name,$arguments){
echo "calling ".$name." with parament:".implode(",",$arguments)."\n";
}
//静态方法的重载,需要将这个方法设定成static
public static function __callStatic($name,$arguments){
echo "calling static ".$name. " with parament:".implode(",",$arguments)."\n";
}
}
$obj=new MagicTest();
// echo $obj."\n";
// $obj(5);
$obj->runTest("para1","para2");
//静态调用
MagicTest::runTest("para1","para2");
?>
通过魔术变量实现同一个方法的正常调用和非正常调用
查看全部
举报