PHP的面向对象编程
不同的作者可能不同,但是OOP语言必须有以下几个方面:
抽象数据类型和信息封装
继承
多态性
在PHP中,包由类完成:
U3000 U3000
类的东西{
在OOP类中,通常是大写的第一个字符。
变量x;
函数setX($ V){
开始 / /方法小写字母组成的词,然后用大写字母分开的词,如(getvalueofarea)
$;
}
函数getX(){
返回$;
}
}
当然,你可以定义你自己的喜好,但最好保持一种标准,这将更有效。数据成员使用var声明的类来定义他们,他们不是在指定类型的数据成员。一个数据成员可以是一个整数,一个数组,相关的数组(数组)或一个对象,方法是在类中定义的函数形式。当您在方法中访问类成员变量时,您应该使用$这个名称,否则,对于一个方法,它只能是一个局部变量。
使用新操作符创建一个对象:
$ obj =新的东西;
然后您可以使用成员函数传递:
$ obj -> setX(5);
看到美元美元= obj -> getX();
在这个例子中,成员函数指定的SETX 5对象的成员变量,x(不是类),然后getX返回值5。这不是一个好的OOP习惯通过类引用访问数据成员,像$ obj -> x = 6。我强烈推荐采用的方法访问成员变量。如果你认为成员变量为非加工和使用对象,使用方法,你将是一个很好的面向对象的程序员。不幸的是,PHP不支持声明私有成员变量,那么糟糕的代码也可以在PHP。继承是在PHP中很容易实现,只要为延长使用关键字。
U3000 U3000
类另一个扩展{
var;
功能塞提($ V){
$;
}
功能盖蒂(){
返回$;
}
}
另一个类的对象现在拥有父类(数据)的所有数据成员和方法,加上它们自己的数据成员和方法。
你可以用它
一些新的$ obj2 =;
$ obj2 -> setX(6);
$ obj2 ->塞提(7);
PHP还不支持多重继承,因此不能从两个或两个以上类派生新类。如果我们重新定义getX方法在其他类,我们不能在什么使用getX方法。如果你声明一个数据成员中具有相同名称的派生类,当你处理它,它将隐藏基类的数据成员。
您可以在类中定义构造函数。构造函数是与类名相同的方法,当您创建类的对象时调用它,例如:
U3000 U3000
类的东西{
变量x;
函数(y){
$;
}
函数setX($ V){
$;
}
函数getX(){
返回$;
}
}
因此,您可以通过以下方式创建对象:
$ obj =新的东西(6);
构造函数自动将6赋值给数据变量x。构造函数和方法是常用的PHP函数,因此可以使用默认参数。
函数($ = 3
然后:
$ obj =新的(东西); / / x = 3和y = 5
$ obj =新的东西(8); / / x = 8和y = 5
$ obj =新的东西(8,9); / / x = 8和y = 9
默认的参数是在C++的方式,所以你不能忽略y的值,并给出X默认参数。参数从左到右分配。如果参数小于所需参数,则将使用默认参数。
当派生类对象被创建时,它的构造函数被调用。未调用父类的构造函数。如果要调用基类的构造函数,您必须在派生类的构造函数中显示调用。这是可能的,因为父类的所有方法在派生类中都可用。
U3000 U3000
函数另一个(){
此$ = y = 5;
这东西();
显示/调用基类构造函数
}
一个优秀的OOP机制是使用抽象类,抽象类不能被实例化,只能提供给派生类的接口,设计师经常使用抽象类来迫使程序员派生自基类,以确保新的类包含一些预期的功能。PHP中没有标准的方法:但是如果你需要这个功能可以在基类中定义的,并在其构造函数添加死后调用,这样可以保证基础类不能实例化,现在在每一个方法(接口)其次是死的说法,因此,如果一个程序员不在派生类中的覆盖方法,将引发错误,因为PHP是无类型的,你可能需要确认一个OB对象是来自你的基类。然后添加一个方法的基类,在基类中返回一个类的身份(返回一些识别ID),并验证该值,当你得到一个对象参数。当然,如果一个邪恶的坏的程序员覆盖派生类中的方法,这种方法是行不通的,但总的问题是懒惰的程序员,而不是邪恶的程序员。
当然,只要程序员在工作中打印出来,就可以使基类不可能被看到,PHP中没有析构函数。
超载(不同于报道)不支持PHP,面向对象,你可以重载一个方法实现两个或两个以上的具有相同名字的方法,但有不同数量或类型的参数(取决于语言)。PHP是一种松散型的语言,所以它不工作的类型重载,但它不工作,通过重载参数个数。
有时在OOP中重载构造函数非常好,所以可以用不同的方式创建对象(通过不同数量的参数):
U3000 U3000
类{
函数的Myclass(){
$name =MyClassfunc_num_args();
$ $ >名称();
这个名称(一般)的注释是错误的,但是这里是一个名为方法名的名字。
}
功能myclass1($ x){
代码;
}
功能myclass2(X,Y元){
代码;
}
}
通过类中的额外处理,这个类的使用对用户是透明的:
以此新Myclass(1美元= '); / /电话myclass1
$ obj2 =新Myclass(1,2); / /电话myclass2
有时它工作得很好。
多态性
多态性是一个对象在运行时根据传递的对象的参数确定要调用哪个对象的能力。在派生类中,覆盖绘图方法。你可以有另一个功能。它希望使用一个参数x,并且你可以调用$ x -画()。如果你有多态性,你所调用的绘制方法取决于传递给函数的对象的类型。