1:PHP中类初步接触
2:this 关键子的应该(访问当前对象中的对象属性和对象方法的系统变量)
3:__construct 初始化函数 在PHP 4中初始化可以这么写 function Mypc(){}..和类名一定要相同
4:private 关键子的应用,修饰类中的属性和方法。使其属性或方法只能在本类中访问,
5:__get() 函数应用 取得当前类中的封装的过属性或方法并转换成共有属性
6:__set() 函数的应用 取得当前类中的封装的过属性或方法重新赋值执行操作
7: extends 继续 实现对基类(父类)中属性和方法的复用
8:重载。。我的理解是 当子类继承父类时候,实例化子类的时候,需要用到父类重的某写方法,那么我们不需要在去实例化父类,就可以得到父类中的木某写方法
9:abstract 抽象 声明抽象类的关键子
10:final 修饰类 则类不能被继承
11: static 用来定义类的静态属性或方法,可以在类未被实例化时使用。
self 用来用类访问当前类中的静态属性或方法的关键字,类似与$this关键字
12:const 定义常量
13: interface 接口 implements 引用接口
14: 接口的综合应用
15:instanceof 用来测定一个给定的对象是否来自指定的对象类。
16: __tostring() 直接打印对象句柄,从而获得该方法的基本信息或其他内容
17: __call($funname,$arr_value) 对象方法的异常处理...
18:__autoload() 快速取得对象名称并自动载入进当前页面
如果我们一般调用某个文件中的类或方法时。。一般都如下写
如果这里有N多文件要被调用。岂不要些很多的 include()..
下面__autoload()方法很好解决
仅供参考
- class Mypc //类名
- {
- public $name; //声明属性,对象名称
- function game() //类的方法、动作
- {
- return "玩游戏";
- }
- }
- [color=#000000]$pc1=new Mypc(); // 创建PC1对象实例[/color]
- $pc1->name="IBM电脑"; // 给PC1对象赋值,声明对象名称
- echo $pc1->name; //输出对象名称
- echo $pc1->game(); //输出对象执行的动作方法
- class Mypc
- {
- public $name;
- function game()
- {
- return $this->name."玩游戏"; //这里,注意看清楚
- }
- }
- $pc1=new Mypc();
- $pc1->name="IBM电脑";
- echo $pc1->game();
- 输出结构为:IBM电脑玩游戏
- class Mypc
- {
- public $name;
- function __construct($name) //初始化函数,不需要在new之后写很多的echo==
- {
- $this->name=$name; // 初始化对象
- $this->game(); //初始方法,动作
- }
- function game()
- {
- echo $this->name."玩游戏";
- }
- }
- $pc=new Mypc("IBM电脑"); //实例化对象
- 输出结果:IBM电脑玩游戏
- class Mypc
- {
- private $name; // private 设置私有对象属性
- function __construct($name) //初始化函数
- {
- $this->name=$name; // 在本类中可以用this关键子访问
- }
- function game()
- {
- echo $this->name."玩游戏"; //方法中同样
- }
- }
- $pc=new Mypc("IBM电脑");
- // echo $pc->name="IBM电脑"; //那么在类的外面就访问不了
- echo $pc->game();
- //输出结果为:IBM电脑游戏,//若类外访问会报错
- class Mypc
- {
- private $name;
- function __construct($name) //初始化函数
- {
- $this->name=$name;
- }
- function __get($name) //__get函数
- {
- return $this->name;
- }
- }
- $pc=new Mypc("IBM电脑");
- echo $pc->name;
- //即使name是私有属性,系统提高了__get()函数来对其访问,输出结果还是 IBM电脑
- class Mypc
- {
- private $name;
- function __construct($name) //初始化函数
- {
- $this->name=$name;
- }
- function __get($name)
- {
- return $this->name;
- }
- function __set($n,$v) //__set 函数
- {
- $this->$n=$v;
- }
- }
- $pc=new Mypc("IBM电脑");
- $pc->name="aa"; // 这里就执行了__set函数,并重新赋值,输出结构是 aa
- echo $pc->name;
- class Mypc //声明类Mypc
- {
- public $name;
- function game()
- {
- return "aaa";
- }
- }
- class Mypc1 extends Mypc //声明类Mypc1继承Mypc
- {
- // 那么既然Mypc1继承了Mypc,就可以访问其属性,和方法
- }
- $pc=new Mypc1;
- echo $pc->name="haha";
- echo $pc->game();
- // 输出结果为:aaahaha
- class Mypc
- {
- function game()
- {
- return "aaa";
- }
- }
- class Mypc1 extends Mypc
- {
- function game()
- {
- return Mypc::game()."bbb"; //这里就重载了父类的方法
- }
- }
- $pc=new Mypc1;
- echo $pc->game();
- //输出结果是:aaabbb
- abstract class Mypc //声明抽象类
- {
- abstract function game(); //方法也必须是抽象的
- }
- class Mypc1 extends Mypc
- {
- function game() //重载抽象类中的方法,必须一一重载
- {
- return "aaa";
- }
- }
- $pc=new Mypc1;
- echo $pc->game(); // 输出结果:aaa
- final class A //声明不能被继承的类A
- {
- public $name;
- }
- class B extends A // 那么这里继承A 是不允许的
- {
- }
- $c=new A; // 但实例化B的时候则会报错
self 用来用类访问当前类中的静态属性或方法的关键字,类似与$this关键字
- class A
- {
- static $name="aaa"; //声明静态属性
- static function game()
- {
- return self::$name."bbb"; // 这里用self直接访问本类中静态属性
- }
- }
- echo A::$name; // 声明为静态的属性,类外部可以不实例化,直接用“类名::属性”访问
- echo A::game(); // 方法也是一样
- // 输出结果为:aaaaaabbb
- class A
- {
- const NAME="aaa"; // 定义常量,一般采用大写
- static function game() // 声明静态方法,以便方法常量
- {
- return self::NAME; // self 访问常量
- }
- }
- echo A::game(); //直接方法类AZ中的静态方法
- / 输出结果:aaa
- interface demo //定义接口。接口中的的属性必须为常量
- {
- function fun(); //定义抽象方法。。。接口中抽象方法不需要加abstract
- }
- class Mypc implements demo //应用接口
- {
- function fun() //必须重载接口中所有的抽象方法
- {
- echo "aa";
- }
- }
- $pc=new Mypc;
- $pc->fun(); //输出:aa
- interface demo1 //定义接口1
- {
- const NAME="aaa";
- function fun1();
- }
- interface demo2 //接口2
- {
- function fun2();
- }
- interface demo3 //接口3
- {
- function fun3();
- }
- class Mypc implements demo1,demo2 //类Mypc引用了接口1和2
- {
- function fun1()
- {
- echo "111";
- }
- function fun2()
- {
- echo "222";
- }
- }
- class Mypc2 extends Mypc implements demo3 //类Mypc2 先继承 父类Mypc,然后在引用接口3 ,那么该类就拥有了上面所有属性和方法
- {
- function fun3()
- {
- echo "333";
- }
- }
- $pc=new Mypc2;
- echo Mypc2::NAME;
- $pc->fun3(); // 当被实例化的时候,我们需要用到哪个接口,直接调用就OK了,很方便的,可以想象下电源插板的那种感觉
- // 这里的输出结果是:aaa333
- view plaincopy to clipboardprint?
- interface usb //定义usb接口
- {
- function type(); //定义usb接口类型
- function alert(); // 接口动作
- }
- class zip implements usb
- {
- function type()
- {
- echo "1.0";
- }
- function alert()
- {
- echo "aaa";
- }
- }
- class mp3 implements usb
- {
- function type()
- {
- echo "2.0";
- }
- function alert()
- {
- echo "bbb";
- }
- }
- class Mypc
- {
- function pcusb($what)
- {
- $what->type();
- $what->alert();
- }
- }
- $zip=new zip();
- $mp3=new mp3();
- $mypc=new Mypc();
- $mypc->pcusb($zip); // 输出 1.0aaa
- class A{} //类A
- class B{} //类B
- $ab=new A();
- if($ab instanceof A)
- {
- echo "A";
- }
- elseif($ab instanceof B)
- {
- echo "B";
- } //输出A
- class My
- {
- function __tostring()
- {
- return "aaa";
- }
- }
- $p=new My();
- echo $p; //输出aaa
- class A
- {
- function __call($funname,$arr_value)
- {
- echo "这是一个不存的方法:".$funname."<br>";
- echo "错误的参数:".$arr_value."<br>";
- }
- function B()
- {
- }
- }
- $p=new A;
- $p->demo(); //这里 实际上 demo方法不存在,,那么程序就会调用 __call中方法。
- / 输出结果是:这是一个不存的方法:demo
- 错误的参数:Array
如果我们一般调用某个文件中的类或方法时。。一般都如下写
- include("mypc.php");
- include("demo.php");
下面__autoload()方法很好解决
- function __autoload($name)
- {
- include($name."php") // 这里将会自动调用。执行include(...php)
- }
仅供参考
来源:oschina
链接:https://my.oschina.net/u/148323/blog/17435