今天学习到了MVC结构,发现代码中调用类里面的方法时都要先实例化类,最后在调用类的方法
比如:
$xxxxx = new xxxxx(); $xxxxx->ccc('hello wolrd');
可是不是可以直接像下面这样调用吗?
xxxxx::ccc('hello wolrd');
为什么一定要实例化?实例化能带给我们什么?与直接调用相比有什么好处?求大神解惑
->,插入式解引用操作符(infix dereference operator),将对象的引用指向对象,例如对象->对象的方法。::,作用域解析操作符(Scope Resolution operator),用于调用类的静态成员变量或是类之间的调用。详见博文。也是说 $xxxxx->ccc('hello wolrd'); 为调动类中的普通方法,要先实例化类的实例。xxxxx::ccc('hello wolrd') 为调用类中的静态方法,不需要实例化类可直接调用。
->
::
$xxxxx->ccc('hello wolrd');
xxxxx::ccc('hello wolrd')
实例化类之后能访问类的方法与属性。而静态方法能独立完成一个无状态的操作。静态方法和实例化方法的更多相关。
OOP编程思想,举个例子来说
$person=new Person(); $person.username="godtoy"; 这种方式,每一个都是一个实例
使用static的优势在于如果是工具类就比较方便
Utils::max(val1,val2);
很可爱的楼主 提出的问题也很可爱 话说这种问题为什么要去踩呢....
很显然就是,下面那种方法也是可以调用的,两种都可以,只不过区别在于,下面一种只有类的静态成员函数可以这样调用至于为什么要实例化,估计是题主根本不懂得什么是类?我实在也不是谦虚,不能说出太多富有哲理详尽的解释,只能说
类是对象的抽象,对象是类的实例,就好比人类是对所有人的抽象,比如人作死就会死,这是人(类)的属性,现在出生了一个小孩(实例化),那么作死就会死,对这个小孩(对象)的有效
之所以我们要去抽象的总结出人类的特征,就是要让我们能更好的学习如何去,比如你是一个医生,就能更好的去医治每一个个体(关键还是实例化后的对象),当然每一个个体还不太一样,自己可以再去看看文档等更详细的解答
主要为了面向对象,可以通过一些参数实例化一个对象,你这是静态调用,不存在对象
实例化好比一台电视里面有很多节目,此时你想看电视,你想看电视得打开电视,那么你得打开电视上的开关按钮,那就得需要new这个关键字去实例化这个对象,好让我们能看到电视节目能操作电视机里面的功能。
与直接调用相比,实例化调用可以在类里面的方法提供访问权限访问修饰符:
public (公共的、默认)
protected (受保护的)
private (私有的)
而直接调用就不需要实例换,使用起来方便而已。
假设你定义了一个Car类,那么这个类是一个图纸,你不能拿一个图纸出去卖吧,所以你需要new生产出一辆车,才能卖,才能开。因为你可以参照这个图纸,生产很多车啊。
Car
new
当然这个Car可能会有一些静态方法或者属性,这是你不需要生产汽车就可以使用的,比如你要看图纸,那就是Car的静态方法show。
show
如果使用静态方法就不存在构造函数这一个说法了。
你需要 单例模式
->
,插入式解引用操作符(infix dereference operator),将对象的引用指向对象,例如对象->对象的方法。::
,作用域解析操作符(Scope Resolution operator),用于调用类的静态成员变量或是类之间的调用。详见博文。
也是说
$xxxxx->ccc('hello wolrd');
为调动类中的普通方法,要先实例化类的实例。xxxxx::ccc('hello wolrd')
为调用类中的静态方法,不需要实例化类可直接调用。实例化类之后能访问类的方法与属性。
而静态方法能独立完成一个无状态的操作。
静态方法和实例化方法的更多相关。
OOP编程思想,举个例子来说
使用static的优势在于如果是工具类就比较方便
很可爱的楼主 提出的问题也很可爱 话说这种问题为什么要去踩呢....
很显然就是,下面那种方法也是可以调用的,两种都可以,只不过区别在于,下面一种只有类的静态成员函数可以这样调用
至于为什么要实例化,估计是题主根本不懂得什么是类?
我实在也不是谦虚,不能说出太多富有哲理详尽的解释,只能说
之所以我们要去抽象的总结出人类的特征,就是要让我们能更好的学习如何去,比如你是一个医生,就能更好的去医治每一个个体(关键还是实例化后的对象),当然每一个个体还不太一样,自己可以再去看看文档等更详细的解答
主要为了面向对象,可以通过一些参数实例化一个对象,你这是静态调用,不存在对象
实例化好比一台电视里面有很多节目,此时你想看电视,你想看电视得打开电视,那么你得打开电视上的开关按钮,那就得需要new这个关键字去实例化这个对象,好让我们能看到电视节目能操作电视机里面的功能。
与直接调用相比,实例化调用可以在类里面的方法提供访问权限访问修饰符:
public (公共的、默认)
protected (受保护的)
private (私有的)
而直接调用就不需要实例换,使用起来方便而已。
假设你定义了一个
Car
类,那么这个类是一个图纸,你不能拿一个图纸出去卖吧,所以你需要new
生产出一辆车,才能卖,才能开。因为你可以参照这个图纸,生产很多车啊。当然这个
Car
可能会有一些静态方法或者属性,这是你不需要生产汽车就可以使用的,比如你要看图纸,那就是Car
的静态方法show
。如果使用静态方法就不存在构造函数这一个说法了。
你需要 单例模式