
网上的文章博客这种东西已经写烂了。
我只是写写自己理解....
首先都知道php的面向对象,什么封装,集成,多态,灵活,简单,代码简洁,重用行强,利于维护,什么什么三个方向:灵活性,重用行,扩展性。
(网是一大波文章的文字大体一致,粘贴复制的货,练标点符号都一样....介绍的好像邻居java的面向对象就不行似的)--就是吐槽一下粘贴复制的人。。
还好今天不讲面向对象。。我就是谢谢面向对象中的 类与对象的关系还有访问(详细)
首先先说一下访问:(分两类)
访问又分为静态成员的访问和普通成员访问
1:静态成员
- 类内访问
self::$静态属性名 / self::$静态方法名 / 类常量名 (其实类内页可以使用类外访问的类名的访问方式,不过考虑到了后期类名的更改,self就很方便的解决了这个问题)
- 类外访问
类名::$静态属性名 / 类名::$静态方法名 / 类常量名
2:普通成员
- 类内访问
$this->属性名 / $this->方法名
- 类外访问
$对象名->属性名 / $对象名-> 方法名 ($对象名 指的是实例化后的对象)
别觉得乱,我单个演示
演示区:
一:静态成员属性的访问二
1: 静态外部访问

2:静态内部访问 (要知道,在类内部访问类成员必须定义一个方法来访问)


1:类内访问类内成员首先要定义一个方法在方法内访问;
2:最开始介绍到:类内其实可以使用2图中类名的访问方式,考虑到项目后期可能会有类名更改问题,类内最好使用self来代替
(不过也正好证明了在类内访问其实就是使用类进行指定类内的成员,讲这个是因为不同于普通成员中的类内访问方式--$this)
二:静态成员方法的访问
1:在类外访问

在类外使用 类名::类中的方法名。 (__METHOD__指的是当前方法的方法名)
1:在类内访问

类内访问静态方法,同样需要在方法内访问,定义的方法可以使用普通方法进行访问,也可以定义一个同样是静态方法的方法来访问其他静态方法。。(可能这句话有些绕,直接分析框中的代码就行)
三:普通成员的属性访问
1:在类外访问

(其中有个需要注意的地方一会儿后面总结,记得看)
2:在类内访问

你可能已经发现了,为什么在最开始静态访问演示的时候,红框内的变量名都由$符号,而这里却没有。
要知道这里面php里面有个可变属性和可变方法。下面来演示一下。

在外面如果不带$,就是代表着取obj这个对象中进行访问查找 为此名字的成员。
一旦加上$,因为在类外部,就会被当做变量来找,所以就会报错。当然可以这样写 ⬇

(其中一个值当作另一个的名)当obj进行指向访问的时候 $member就会被解析为 member
四:普通成员的方法访问
1:类外访问

2:类内访问

在次直接写了 可变的 形式,方法同样适用,思考(这样的好处可以咋以后比如前台页面的访问可以都给定 一个页面,页面中定义好类,类中定义好各个对象,通过页面点击传递要制定的对象名也就是方法名,然后使用可变的形式,来随时替换到变量,而调用只需要调用一次 $obj->变量名)
五:类常量的访问
首先:类常量就是const定义的常量。
要记住:类常量只能用const来定义
1:类外访问

1:类内访问

跟静态方式其实一样,但唯一的差别就是就是最前面第一张图中的 注释,变量名在类内声明的时候没有 $。
注意:(至于可变的形式,在常量中类内或者类外访问都不可以)不过在调用方法的时候可以使用可变的形式,毕竟跟常量也没太大关系。
最后来说一下 类于对象的内存关系吧:
我们上面都知道,静态访问和类常量都是使用 类名来访问,而其他都是通过实例化的对象来访问。
其实:
在类内部,是分空间的,静态成员一般保存在类空间里,而像其他的 普通属性都是保存在对象的空间里(这里的对象指的是实例化的对象)
而唯一特殊的就是 成员方法,它按我们的访问方式是通过 对象来访问的,但是它并不存储在对象的空间里,相反存储在了 类的空间里。
我们来使用前面的代码 证明一下:
一:

可以看出 新声明的obj1 明显没有被前面的 obj 改变的成员5 而改变!
就算是这个特殊的成员方法虽然存在了类空间里,但是仍不会被改变。
这样的原因就是因为存储在了 实例化的对象的空间里,一个实例化中的改变不会英雄其他实例化对象的改变
二:

而在类空间中除了不能改变的常量外的静态成员只要被改变,其他的实例化对象同样就会被调用。如上图显示。
这是差不多的理解还有解释,以后继续补充。