Re: [请益] 关于静态变量与全域变量

楼主: tkdmaf (皮皮快跑)   2015-06-18 12:47:44
※ 引述《tas72732002 (葱头)》之铭言:
: 请问一下各位大大, 在物件导向的架构下,
: 使用静态变量和全域变量有什么差异吗?
: Ex : public static $user1 = "";
: global $user1; $user2 = "";
: 它们不都是会被配置一块内存永久保存, 直到程式执行结束吗?
: 两者有不同吗?
public static <== 表示定义开放成员的静态
这是php的物件导向所有的做法。
宣告静态跟未宣告所使用的方法是不同的
class demo{
public static function myFunc()
{
//要呼叫本体其他函式或静态成员属性只能用self
}
public function myFunc1()
{
//要呼叫本体其他函式或成员可以用$this
//但是若要呼叫其他静态函式和静态成员还是只能用self
}
}
虽然说demo::myFunc()和demo->myFunc()都会有作用。
但既然是静态呼叫,以使用demo::myFunc()为主
差异上来说,前者不需物件被实体化也能呼叫。
后者是必须实体化才能呼叫。
不过这当中还有的差异是一但你使用了静态呼叫就不能在方法中
使用$this,如果需要对本体其他的属性或是函式呼叫只能用self::funcName()
我自己比较多时候是在使用静态呼叫生成各自独体的物件时会看到。
再来就是global
这个东西叫做“全域变量”。
他跟php的无件导向一点关系也没有。
而且在正常的情形下,也不怎么会想去用到他。
因为一个没弄好,你可能就会出现未可预期的结果。
一般而言如果你只是想在某个范畴内宣告一定范围的全域
还是使用物件导向的属性就好了。
一般而言如果是整个程式要用到的设定,那就用常数去定义。
以我自己来说,我不怎么喜欢也不怎么会想去用到global。
作者: tas72732002 (葱头)   2015-06-18 13:08:00
静态变量感觉是执行程式就会预先加载(java的认知)
作者: mmis1000 (秋月恋枫)   2015-06-18 17:45:00
对PHP而言,应该要跑到import那一句后才会加载?

Links booklink

Contact Us: admin [ a t ] ucptt.com