1. php中 不能用 new 给 static变量赋值吗
<?php
finalclassCLLog{//final关键字防止类被继承
privatestatic$ins=null;
privatestatic$LOGNAME=null;
private$num=null;//测试用
privatefunction__construct(){//protected关键字防止类从外部被实例化
//你的代码
$this->num=mt_rand(10000,99999);//测试,看你每次获得的对象是不是同一个对象
}
privatefunction__clone(){//如果有人要克隆你的类,就returnfalse
returnfalse;
}
publicstaticfunctiongetIns($LOGNAME){//能过公开的getIns从内部获得一个对象
self::$LOGNAME=$LOGNAME;
if(self::$ins==null){//如果对象不存在,就创建一个对象,并返回
self::$ins=newself();
returnself::$ins;
}else{//如果对象已经存在,就直接返回这个对象
returnself::$ins;
}
}
}
//以下为测试用(如果,得到的随机数都是同一个数字,就说明以下的对象都为同一个对象了)
$tt=CLLog::getIns("efjewfbw");
var_mp($tt);
$tt=CLLog::getIns("efjewfbw");
var_mp($tt);
$tt=CLLog::getIns("efjewfbw");
var_mp($tt);
$tt=CLLog::getIns("efjewfbw");
var_mp($tt);
?>
2. php 中static public 与public static有区别吗
static public与public static是等价的,这两者只是两个修饰符的顺序不同。
根据oracle.com教材中第八章的描述,如果两个或两个以上的(不同的)字段修饰符出现在字段声明,它们出现的顺序需与FieldModifier一致,这只是习惯,但不是必需的。
部分修饰符说明:
public是访问权限修饰符,用于控制外界对类内部成员的访问,声明为public的对象成员是完全共有的,外界可以随意访问,除此之外还有private,protected和默认。
static控制类成员变化的修饰符。static是静态成员修饰符,其修饰的静态变量脱离具体对象独立存在,在内存中之后一份拷贝,所有的对象都公用这一个存储空间,所以对static修饰的静态变量进行的修改对该类的所有对象都起作用。static修饰的静态函数代表所有对象的统一操作,只能调用静态变量。static是针对面向对象中的“多态”而提出来的,static修饰的静态成员不存在多态性。
附:FieldModifier顺序
3. 关于 php 类 关键字 public static 连用的问题
static是静态成员的声明关键字,跟public不冲突
static控制成员的存在周期,public控制成员的访问权限
public static声明这个变量为public就是可以公共访问的,且是静态变量
class test{
public static $name="myname";
}
$testOne = new test();
echo test::$name;//输出myname
但是如果将以上是public,改成private,将提示错误
4. php怎么理解这些个关键字啊,public;private;protect;final;static;const;我感觉这
public: 公有属性或方法
在子类中可以通过self::var 或self::method 来调用,可以通过parent::method来调用父类中的方法,但不能调用公有属性.
在实例中可以通过$obj->var或self::method 来调用
protected: 受保护类型
在子类中可以通过self::var 或self::method调用,可以通过parent::method来调用父类中的方法
在实例中不能通过$obj->var 来调用 protected类型的方法或属性
private: 私有类型
该类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法
再来说说final
1.final不能用来修饰成员属性
2.final只能修饰类和方法
作用:被修饰的类不能被子类所继承;被修饰的方法不能被子类的方法覆盖。
然后来说说static
1.static用来修饰成员属性和成员方法,但不能用来修饰类
2.用static修饰的成员属性可以被同一个类的所有对象共享
3.静态的数据是存在 内存中的 数据段中(初始化静态段)
4.静态的数据是在类在第一次加载时,分配到内存中的
5.什么是类被加载?只要在程序中使用到这个类(有这个类名出现)
6.静态的成员属性都要用类名去访问,不用创建对象,不用对象去访问;在类里边可以用self代表本类($this)
7.静态方法,不能访问非静态的成员属性(但是,在非静态方法却能访问静态的成员属性),非静态的成员属性,必须用对象访问,在内部访问非静态成员属性,用$this.
8.如果你确定一个方法中不需使用到非静态的成员属性,则可以将这个方法声明为静态方法,不需实例化对象,就可以访问
最后来说说const
1.它只能用来修饰成员属性
2.在类中声明常量必须使用const
3.访问方式和访问静态成员属性一样(类外使用 类名::成员属性,类里边则使用self::成员属性)
4.常量一定要在声明的时候就给初始值
5. PHP请问在static的function中如何访问变量
静态方法只能访问其他的静态方法或属性,比如
classA{
privatestatic$url;
($url){
self::$url=$url;
}
(){
returnself::$url;
}
}
//或者在你的静态方法中获得实例,当然这样的话可能达不到你预期的效果,推荐你还是使用上面的方法。
classA{
private$url='demo';
publicstaticfunctiongetUrl(){
$obj=newself();
return$obj->url;
}
}
6. php static可以是保护权限吗
PHP中有三种访问修饰符,分别是:
public(公共的、默认)
protected(受保护的)
private(私有的)
public(公共的、默认)在PHP5中如果类没有指定成员的访问修饰符,默认就是public的访问权限。
protected(受保护的)被声明为protected的成员,只允许该类的子类进行访问。
private(私有的 ) 被定义为private的成员,对于类内部所有成员都可见,没有访问限制。对类外部不允许访问。
图解
demo
复制代码 代码如下:
class Woman{
public $name = "gaojin";
protected $age = "22";
private $height = "170";
function info(){
echo $this->name;
}
private function say(){
echo "这是私有的方法";
}
}
//$w = new Woman();
//echo $w->info();
//echo $w->name;//公共属性可以访问
//echo $w->age;// 受保护属性,报致命错误
//echo $w->height;// 受保护属性,报致命错误
//私有方法,访问出错
//$w->say(); // 私有方法,访问出错
class Girl extends Woman{
// 可以重新定义父类的public和protected方法,但不能定义private的
//protected $name = "jingao"; // 可以从新定义
function info(){
echo $this->name;
echo $this->age;
echo $this->height;
}
function say(){
//parent::say();//私有方法 不能被继承 如果父类的的say方法是protected 这里就不会报错
echo "我是女孩";
}
}
$g = new Girl();
$g->say();//正常输出
//echo $g->height;//私有属性访问不到 没输出结果
//$g->info();//这是输出 gaojin22 $height是私有的属性没有被继承
//$g->height ="12";//这里是重新定义 height属性 也赋值了
//$g->info();//所以这里会输出来gaojin2212
7. 什么时候该使用PHP的static属性和方法
静态方法就是隶属于一个类的函数,为什么希望让这个函数隶属于类,一般有两种情况:1、函数的名字太常规,以至于可能与其它独立函数产生命名冲突,则你把它作为类的静态方法,可以变相起到封入命名空间的效果。比如你想为某个类定义一个特别版的setcookie();2、当一个函数希望访问某个类的私有成员变量时(private 或 protected),显然在通常情况下,它作为外部独立函数是访问不到的。把它定义为那个类的静态方法,就可以作为类的成员函数轻松访问那些私有成员变量了。另外对 6 楼做一个补充:静态成员方法也有访问级别,如果定义为了 private 或 protected,则外部是无法作为普通函数直接调用的。
8. php static 方法有什么好处
静态方法不需要所在类被实例化就可以直接使用。
静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。
静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。
9. php 中使用private static 方法名 是什么意思
private 关键字声名 一个私有的方法或属性;定义了private的方法或属性在类的外部不能访问,只能在本类中使用。
类中使用私有方法:
$this->属性 或 方法()
static 关键字 是创建一个静态方法或静态属性;定义了static 的方法或属性不需要实例化就可以使用。
访问静态变量 类名::$变量名;
访问静态方法 类名::方法名();
访问本类静态变量 self::$变量名;
访问本类静态方法 self::方法名();
访问父类静态变量 parent::$变量名;
访问父类静态方法 parent::方法名();
10. php中声明变量var与private、public、static的区别
var
是声明一个变量/对象,public,
private,
是类/类的属性/类的字段的访问修饰符,static是类/类的属性/类的字段的修饰符