① php中怎么类外访问私有方法
你问的是私有方法还是私有属性?
你说的__get __set 是访问和设置属性用的。
__call才是访问方法用的。
但这两种都需要修改原始类,既然有这个权限了,那私有方法有什么必要定义呢?
另外一种获取私有属性或调用私有方法的思路是通过反射:
//MyClass这个类中包含了一个名为myFun的私有方法
classMyClass{
private$tmp='hello';
privatefunctionmyFun()
{
echo$this->tmp.''.'world!';
}
}
//通过类名MyClass进行反射
$ref_class=newReflectionClass('MyClass');
//通过反射类进行实例化
$instance=$ref_class->newInstance();
//通过方法名myFun获取指定方法
$method=$ref_class->getMethod('myFun');
//设置可访问性
$method->setAccessible(true);
//执行方法
$method->invoke($instance);
//获取属性
$property=$ref_class->getProperty('tmp');
//打印属性
var_mp($property);
不知道你提这个单纯是个问题,还是有别的需求,可以多看看php手册学习一下。
php 访问控制
php 反射
② php私有函数如何调用
要先搞清楚类和对象的关系
将一个类实例化后就变成对象,私有函数只能在类内部使用,不能在类外,也就是对象上使用,也不能在子类中使用,如定义一个parent类
class
parent{
private
function
_justForMyself(){
echo
"这是私有函数,只能在类内部使用哦";
}
public
function
forAll(){
echo
"这是公共函数,在类外和子类都可以使用";
echo
"因为我在类内,可以调用私有函数";
$this->_justForMyself();
}
}
现在我们实例化这个类,让他变成一个对象
$obj
=
new
parent();//实例化parent类,让他变成一个对象并赋值给$obj
$obj->forAll();//forAll是公共函数,因此这里可以执行看到输出
$obj->_justForMyself();//_justForMyself是私有函数,类外不可使用,因此执行到这里会报错
③ php子类可以继承和访问父类的私有属性和方法吗
你这样理解也可以,当父类有私有的方法和属性,子类是继承不到的,所以子类不能访问父类的私有方法和属性。java
特性,private:类中只要限定为private的成员,只能被这个类本身访问
④ PHP中private和public还有protected的区别
public:声明方法和属性可以被随意访问。
Protected:声明的方法和属性只能被类本身和其继承子类访问。
private:只能被定义属性和方法的类访问。
private 是完全私有的,只有当前类中的成员能访问到.
protected 是受保护的,只有当前类的成员与继承该类的类才能访问.
protected的访问权介于public和private之间,实际上三者的区别就是权限问题,private和protected区别主要体现在其继承类的访问权限上,这些你可以自己编写一个程序,写个类,编译一下你就很清楚他们权限的区别了。
私有成员private member
只能被成员函数和类的友元访问
实行信息隐藏的类把其数据成员声明为private
被保护成员protected member
对派生类derived class 就像public 成员一样
对其他程序则表现得像private