⑴ php如何调用类中的protected方法
classControllercommonfooter{
protectedfunctionindex(){
echo'abcd';
}
}
$reflection_class=newReflectionClass('Controllercommonfooter');
var_mp($reflection_class);#output_1
$reflection_method=$reflection_class->getMethod('index');
var_mp($reflection_method);#output_2
var_mp($reflection_method->isProtected());#output_3
$class='Controllercommonfooter';
$method='index';
$args=array();
$controller=new$class();
$controller->$method($args);
⑵ php弹出“undefined property:stdclass” ,怎么解决
这种情况一般是你对一个类对象,使用了属性调用造成的。
比如应该是
echo$a->att1;
你写错成了:
echo$a['att1'];
改回来就可以了。
PHP中使用关键字 class 来定义一个类。类的命名一般使用首字符大写,而后每个单词首字符大写连接的方式方便阅读。
在PHP5中,属性指在class 中声明的变量。在声明变量时,必须使用 public private protected 之一进行修饰,定义变量的访问权限。PHP中的属性:用来描述对象的数据元素称为对象的属性(也称为数据/状态)
Public(公开): 可以自由的在类的内部外部读取、修改。
Private(私有): 只能在这个当前类的内部读取、修改。
Protected(受保护):能够在这个类和类的子类中读取和修改。属性的使用:通过引用变量的 -> 符号调用变量指向对象的属性。
在方法内部通过 $this-> 符号调用同一对象的属性。
所以应该用箭头调用而不是括号。
⑶ php class中public,private,protected,static
1. public:权限是最大的,可以内部调用,实例调用
2. protected: 受保护类型,用于本类和继承类调用
常用场景在权限设置
有需要用到权限的Class,只要继承Base这个Class即可用到登录验证。执行Login的时候会先运行Base里面的方法
3. private: 私有类型,只有在本类中使用。
4. static: 一般是在传值的时候使用,表示值不会被修改,默认为public,可用::访问
⑷ PHP __get和__set魔术方法在面向对象中的使用问题
php的面向对象思想编程中声明方法有三种不同的权限:public protect private。
public:权限是最大的,可以内部调用,实例调用等。
protected: 受保护类型,用于本类和继承类调用。
private: 私有类型,只有在本类中使用。
这些权限同样可以应用在变量声明中。
__set __get 都是php的魔术方法,主要是为了用来改变类的私有属性用的。
你觉得麻烦可以将private私有的变量改为公共public变量,这个要看需求和个人对面向对象的思考。
追问 : 我想知道的是(用private封装然后用__set或者__get )和(public设置类的属性)有什么不同.都可以取值赋值.
追答 : 没什么不同的,实现的效果都一样,只是private是为了限制访问入口少一些,或者之前用private时没有考虑到有如今的调用情况,所以在加了set或get。 比较public是所有人都可以访问,private是内部人可以访问,从权限来看,private会安全一些。
⑸ php 的public作用
从PHP5.0版本开始,对象声明时需要声明对象属性和方法的可见性,public关键字表示属性或方法是公开可见的。
在PHP5.0之前未支持对象属性和方法的可见性定义,默认所有的属性和方法都是公开可见的,如以下的对象声明:
//例1
classObj{
var$name='Obj';
functiongetName(){
return$this->name;
}
}
而PHP5开始推荐写法为:
//例2
classObj{
protected$name='Obj';
publicfunctiongetName(){
return$this->name;
}
}
对于例1来说,实际上可以直接访问name属性,从而绕过getName方法,如
$obj=newObj();
echo$obj->name;
而对于例2来说,由于$name属性是protected(受保护的),因此必须使用getName方法才能得到$name属性的值。
同时这也是面向对象语言通用的一种声明方式。
public: 公开可见
protected: 对象内部可见 (该对象的子对象同样可以访问)
private: 对象自身内部可见 (不包含该对象的子对象,或者说private属性和方法不会被继承)
⑹ 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.常量一定要在声明的时候就给初始值
⑺ PHP中private和public还有protected的区别
public:声明方法和属性可以被随意访问。
Protected:声明的方法和属性只能被类本身和其继承子类访问。
private:只能被定义属性和方法的类访问。
private 是完全私有的,只有当前类中的成员能访问到.
protected 是受保护的,只有当前类的成员与继承该类的类才能访问.
protected的访问权介于public和private之间,实际上三者的区别就是权限问题,private和protected区别主要体现在其继承类的访问权限上,这些你可以自己编写一个程序,写个类,编译一下你就很清楚他们权限的区别了。
私有成员private member
只能被成员函数和类的友元访问
实行信息隐藏的类把其数据成员声明为private
被保护成员protected member
对派生类derived class 就像public 成员一样
对其他程序则表现得像private