站内搜索

本次搜索找到结果 68 条
单件模式要解决的问题就是“如何让这个类只有一个实例”。我们的web应用中,大量使用了数据库连接,如果反复建立与数据库的连接必然消耗更多的系统资源。我们如何解决这个问题,建立唯一的数据库连接是必要的方式。我们又如何知道与这个数据库的连接是否已经建立?还是需要现在建立?单件模式可以解决这个问题。先假设我们需要一个类完成在内存中只有一份的功能,我们该如何做呢?我们一步一步的使用前面学过的知识来写一个单件的例子。问题1:前面学过,每次用new类名的方式,就可以创建一个对象。我们必须禁止外部程序用new类名的方式来创建多个实例。解决办法:我们将构造函数设置成private,让构造函数只能在内部被调用,而外部不能调用。这样,...
static关键字用来修饰属性、方法,称这些属性、方法为静态属性、静态方法。static关键字声明一个属性或方法是和类相关的,而不是和类的某个特定的实例相关,因此,这类属性或方法也称为“类属性”或“类方法”如果访问控制权限允许,可不必创建该类对象而直接使用类名加两个冒号“::”调用。static关键字可以用来修饰变量、方法。不经过实例化,就可以直接访问类中static的属性和static的方法。static的属性和方法,只能访问static的属性和方法,不能类访问非静态的属性和方法。因为静态属性和方法被创建时,可能还没有任何这个类的实例可以被调用。static的属性,在内存中只有一份,为所有的实例共用。使用sel...
PHP5中使用parent::来引用父类的方法。parent::可用于调用父类中定义的成员方法。parent::的追溯不仅于直接父类。通过parent::调用父类方法<?php/***声明一个员工类,经理类继承自员工类*/classemployee{protected$sal=3000;publicfunctiongetSal(){$this->sal=$this->sal+1200;return$this->sal;}}classManagerextendsemployee{//如果想让经理在员工工资的基础上多发1500元//必须先调用父类的getSal()方法publicfunctio...
PHP5中为解决变量的命名冲突和不确定性问题,引入关键字“$this”代表其所在当前对象。$this在构造函数中指该构造函数所创建的新对象。在类中使用当前对象的属性和方法,必须使用$this->取值。方法内的局部变量,不属于对象,不使用$this关键字取值。局部变量和全局变量与$this关键字,使用当前对象的属性必须使用$this关键字。局部变量的只在当前对象的方法内有效,所以直接使用。注意:局部变量和属性可以同名,但用法不一样。在使用中,要尽量避免这样使用,以免混淆。<?phpclassA{private$a=99;//这里写一个打印参数的方法publicfunctionprintInt($a){e...
如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。当对父类的方法进行重写时,子类中的方法必须和父类中对应的方法具有相同的方法名称,在PHP5中不限制输入参数类型、参数数量和返回值类型。(这点和JAVA不同)子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。声明方法时,如果不定义访问权限。默认权限为public。先设置一个父类,这个父类是“Dog”类,这个类描述了dog的特性。Dog有2个眼睛,会跑,会叫。就这样描述先。我养了一直狗,是只小狗,符合Dog类的特性,但有所不同。我的小狗有名字,我的小狗太小了,不会大声的叫,只会哼哼。我们用继...
你可能知道PHP允许你定义一个默认参数的函数。但你可能并不知道PHP还允许你定义一个完全任意的参数的函数下面是一个示例向你展示了默认参数的函数:<?php//两个默认参数的函数functionfoo($arg1='',$arg2=''){echo"arg1:$arg1\n";echo"arg2:$arg2\n";}foo('hello','world');foo();?>现在我们来看一看一个不定参数的函数,其使用到了func_get_args()方法:<?phpfunctionfoo(){//取得所有的传入参数的数组$args=func_get_args();foreach($argsas$k=...
在PHP5中,可以在类的属性和方法前面加上一个修饰符(modifier),来对类进行一些访问上的控制。Public(公开):可以自由的在类的内部外部读取、修改。Private(私有):只能在这个当前类的内部读取、修改。Protected(受保护):能够在这个类和类的子类中读取和修改。Private的访问权限private不能直接被外部调用,只能由当前对象调用。前面介绍过关于封装的内容这里不再重复。比如你可以借钱给别人,但不希望别人知道你钱包里面有多少钱。我们把它用private隐藏起来。<?phpclassMoney{private$mymoney=1000;//我有点钱数//借出钱的方法publicfun...
继承是面向对象最重要的特点之一,就是可以实现对类的复用。通过“继承”一个现有的类,可以使用已经定义的类中的方法和属性。继承而产生的类叫做子类。被继承的类,叫做父类,也被成为超类。PHP是单继承的,一个类只可以继承一个父类,但一个父类却可以被多个子类所继承。从子类的角度看,它“继承(inherit,extends)”自父类;而从父类的角度看,它“派生(derive)”子类。它们指的都是同一个动作,只是角度不同而已。子类不能继承父类的私有属性和私有方法。在PHP5中类的方法可以被继承,类的构造函数也能被继承。继承的简单例子我们分析自然界中的关系,动物类与犬类的关系。<?PhpclassAnimal{privat...
析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。GC(GarbageCollector)在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁。这是PHP的GC(GarbageCollector)垃圾处理机制,防止内存溢出。当一个PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中的所有对象同样被销毁。__destruct()析构函数,是在垃圾对象被回收时执行。析构函数也可以被显式调用,但不要这样去做。析构函数是由系统自动调用的,不要在程序中调用一个对象的析构函数。析构函数不能带有参数。程序结束前,所有对象被销毁。析构函数被调用了。<?phpclassPers...
PHP构造函数的声明与其它操作的声明一样,只是其名称必须是construct()。这是PHP5中的变化,以前的版本中,构造函数的名称必须与类名相同,这种在PHP5中仍然可以用,但现在以经很少有人用了,这样做的好处是可以使构造函数独立于类名,当类名发生改变时不需要改相应的构造函数名称了。为了向下兼容,如果一个类中没有名为construct()的方法,PHP将搜索一个php4中的写法,与类名相同名的构造方法。格式:function__construct([参数]){……}在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,所以通常用它执行一些有用的初始化任务。比...