首页 > 后端开发 > 正文

php中怎么类外访问私有方法?

2024-08-28 22:44:14 | 我爱编程网

今天我爱编程网小编整理了php中怎么类外访问私有方法?相关内容,希望能帮助到大家,一起来看下吧。

本文目录一览:

php中怎么类外访问私有方法?

php中怎么类外访问私有方法?

你问的是私有方法还是私有属性?

你说的__get __set 是访问和设置属性用的。

__call才是访问方法用的。

但这两种都需要修改原始类,既然有这个权限了,那私有方法有什么必要定义呢?

另外一种获取私有属性或调用私有方法的思路是通过反射: 我爱编程网

//MyClass这个类中包含了一个名为myFun的私有方法
class MyClass {
    
    private $tmp = 'hello';
    
    private function myFun()
    {
        echo $this->tmp . ' ' . 'world!';
    }
}
 
//通过类名MyClass进行反射
$ref_class = new ReflectionClass('MyClass');
 
//通过反射类进行实例化
$instance  = $ref_class->newInstance();
 
//通过方法名myFun获取指定方法
$method = $ref_class->getMethod('myFun');
 
//设置可访问性
$method->setAccessible(true);
 
//执行方法
$method->invoke($instance);

//获取属性
$property = $ref_class->getProperty('tmp');
 
//打印属性
var_dump($property);

不知道你提这个单纯是个问题,还是有别的需求,可以多看看php手册学习一下。

php 访问控制

php 反射

php中怎么类外访问私有方法?

php this和self的区别

面向对象编程(OOP,Object Oriented Programming)现已经成为编程人员的一项基本技能。利用OOP的思想进行PHP的高级编程,对于提高PHP编程能力和规划web开发构架都是很有意义的。
PHP5 经过重写后,对OOP的支持额有了很大的飞跃,成为了具备了大部分面向对象语言的特性的语言,比PHP4有了很多的面向对象的特性。这里我主要谈的是 this,self,parent 三个关键字之间的区别。从字面上来理解,分别是指 这、自己、父亲。先初步解释一下,this是指向当前对象的指针(可以看成C里面的指针),self是指向当前类的指针,parent是指向父类的指针。 我们这里频繁使用指针来描述,是因为没有更好的语言来表达。关于指针的概念,大家可以去参考百科。
下面我们就根据实际的例子结合来讲讲。
class name //建立了一个名为name的类
{
private $name; //定义属性,私有

//定义构造函数,用于初始化赋值
function __construct( $name )
{
$this->name = $name; //这里已经使用了this指针语句①
}

//析构函数
function __destruct(){}

//打印用户名成员函数
function printname()
{
print( $this->name ); //再次使用了this指针语句②,也可以使用echo输出
}
}
$obj1 = new name( "PBPHome" ); //实例化对象 语句③

//执行打印
$obj1->printname(); //输出: PBPHome
echo "
"; //输出:回车

//第二次实例化对象
$obj2 = new name( "PHP" );

//执行打印
$obj2->printname(); //输出:PHP
?>

说 明:上面的类分别在 语句①和语句②使用了this指针,那么当时this是指向谁呢?其实this是在实例化的时候来确定指向谁,比如第一次实例化对象的时候(语句③),那 么当时this就是指向$obj1对象,那么执行语句②的打印时就把 print( $this->name ),那么当然就输出了"PBPHome"。第二个实例的时候,print( $this->name )变成了print( $obj2->name ),于是就输出了"PHP"。所以说,this就是指向当前对象实例的指针,不指向任何其他对象或类。

{二}。PHP中this,self,parent的区别之二self篇

此篇我们就self的用法进行讲解

首 先我们要明确一点,self是指向类本身,也就是self是不指向任何已经实例化的对象,一般self使用来指向类中的静态变量。假如我们使用类里面静态 (一般用关键字static)的成员,我们也必须使用self来调用。还要注意使用self来调用静态变量必须使用 :: (域运算符号),见实例。

class counter //定义一个counter的类
{
//定义属性,包括一个静态变量$firstCount,并赋初值0 语句①
private static $firstCount = 0;
private $lastCount;

//构造函数
function __construct()
{
$this->lastCount = ++self::$firstCount; //使用self来调用静态变量 语句②
}

//打印lastCount数值
function printLastCount()
{
print( $this->lastCount );
}
}

//实例化对象
$obj = new Counter();

$obj->printLastCount(); //执行到这里的时候,程序输出 1

?>

这 里要注意两个地方语句①和语句②。我们在语句①定义了一个静态变量$firstCount,那么在语句②的时候使用了self调用这个值,那么这时候我们 调用的就是类自己定义的静态变量$frestCount。我们的静态变量与下面对象的实例无关,它只是跟类有关,那么我调用类本身的的,那么我们就无法使 用this来引用,因为self是指向类本身,与任何对象实例无关。然后前面使用的this调用的是实例化的对象$obj,大家不要混淆了。

关于self就说到这里,结合例子还是比较方便理解的。第二篇结束。

{三}PHP中this,self,parent的区别之三parent篇

此篇我们就parent的用法进行讲解。

首先,我们明确,parent是指向父类的指针,一般我们使用parent来调用父类的构造函数。实例如下:

//建立基类Animal
class Animal
{
public $name; //基类的属性,名字$name

//基类的构造函数,初始化赋值
public function __construct( $name )
{
$this->name = $name;
}
}

//定义派生类Person 继承自Animal类
class Person extends Animal
{
public $personSex; //对于派生类,新定义了属性$personSex性别、$personAge年龄
public $personAge;

//派生类的构造函数
function __construct( $personSex, $personAge )
{
parent::__construct( "PBPHome" ); //使用parent调用了父类的构造函数 语句①
$this->personSex = $personSex;
$this->personAge = $personAge;
}

//派生类的成员函数,用于打印,格式:名字 is name,age is 年龄
function printPerson()
{
print( $this->name. " is " .$this->personSex. ",age is " .$this->personAge );
}
}

//实例化Person对象
$personObject = new Person( "male", "21");

//执行打印
$personObject->printPerson(); //输出结果:PBPHome is male,age is 21

?>

里 面同样含有this的用法,大家自己分析。我们注意这么个细节:成员属性都是public(公有属性和方法,类内部和外部的代码均可访问)的,特别是父类 的,这是为了供继承类通过this来访问。关键点在语句①: parent::__construct( "heiyeluren" ),这时候我们就使用parent来调用父类的构造函数进行对父类的初始化,这样,继承类的对象就都给赋值了name为PBPHome。我们可以测试下, 再实例化一个对象$personObject1,执行打印后name仍然是PBPHome。

总结:this是指向对象实例的一个指针,在实例化的时候来确定指向;self是对类本身的一个引用,一般用来指向类中的静态变量;parent是对父类的引用,一般使用parent来调用父类的构造函数。

php中怎么类外访问私有方法?

我想问一下,php面向对象的属性既然分公有,私有,被保护,那什么时候分别用这三个属性呢?感谢回答。

我爱编程网(https://www.52biancheng.com)小编还为大家带来我想问一下,php面向对象的属性既然分公有,私有,被保护,那什么时候分别用这三个属性呢?感谢回答。的相关内容。

这个问题应该是面向对象里去学,不是PHP特有或独有的。
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。
1. 公有继承(public)
公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。
2. 私有继承(private)
私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。
3. 保护继承(protected)
保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。

以上就是php中怎么类外访问私有方法?全部内容,更多相关信息,敬请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“php中怎么类外访问私有方法?”相关推荐
php怎么访问类的方法中的变量!!
php怎么访问类的方法中的变量!!

php怎么访问类的方法中的变量!!方法/函数中的变量是不能直接访问的,不论是PHP还是其他语言。相关知识:变量具有自己的作用域,一般来说只有全局变量可以在任意位置访问,否则只能在其作用域内访问。已以下函数为例function foo() {    $param = 'Hello';}变量$param是在函数内声明的,当你未调用函数foo时,变量$param尚未存在,而f

2024-12-04 02:51:34
php类方法中参数问题,参数怎么是一个类名 加上变量,怎么理解?
php类方法中参数问题,参数怎么是一个类名 加上变量,怎么理解?

php类方法中参数问题,参数怎么是一个类名加上变量,怎么理解?PHP5可以使用类型约束。函数的参数可以指定只能为对象(在函数原型里面指定类的名字),PHP5.1之后也可以指定只能为数组。注:PHP7之后可以指定int,string等。代表方法baz()接收的参数是一个对象,并且指定必须是Test类实例化的对象。比如在后面加如下代码就能正常输出:string(5)"hello"

2024-08-09 20:03:58
怎么实现javascript中调用java类中的方法
怎么实现javascript中调用java类中的方法

怎么实现javascript中调用java类中的方法实现javascript中调用java类中的方法如下:只要调用addJavascriptInterface方法即可映射一个Java对象到JavaScript对象上。1、映射Java对象到JavaScript对象上代码如下:mWebView=(WebView)findViewById(R.id.wv_content);mW

2024-03-21 08:15:37
PHP 静态方法怎么调用父类非静态方法
PHP 静态方法怎么调用父类非静态方法

php直接用类名调用静态方法会不会触发类的构造函数调用静态方法与触发类的构造函数没有必然关系。但是静态方法可以实例化类本身,这时候会触发构造函数,而且可以传参数。如:class classname{    private function __construct($a){        $this->a = $a;        exit($this->a);//打印一下    

2024-07-24 18:21:44
PHP怎么调用其他类的方法
PHP怎么调用其他类的方法

php"直接用类名"和"new实例化"调用函数哪种方法效率更高?1.首先用法不同,__new__()用于创建实例,所以该方法是在实例创建之前被调用,它是类级别的方法,是个静态方法;而__init__()用于初始化实例,所以该方法是在实例对象创建后被调用,它是实例级别的方法,用于设置对象属性的一些初始值。由此可知,__new__()在__init__()之前被调用。如果__new_

2024-07-19 01:34:22
wordpress手机端访问怎么屏蔽footer.php文件?
wordpress手机端访问怎么屏蔽footer.php文件?

wordpress手机端访问怎么屏蔽footer.php文件?这里用到一个函数:wp_is_mobile();写一个例子:if(!wp_is_mobile()){get_footer();}上面的代码意思:不是手机端时显示footer.php文件。建议:因为footer.php里含有wp_footer();函数,而wp_footer()函数里一

2025-01-12 22:34:49
php将string类型转为int类型有哪些方法
php将string类型转为int类型有哪些方法

php将string类型转为int类型有哪些方法php将string类型转为int类型的方法有:1、强制类型转换方法;2、内置函数方法;3、格式化字符串方法。强制类型转换方法是指在要转换的变量之前加上用括号括起来的目标类型,如【(int)$var】。具体方法:(视频教程推荐:php视频教程)1、强制类型转换方式强制类型转换方式,就是“在要转换的变量之前加上用括号括起来的目标

2024-07-21 13:12:05
php如何获取类所有方法名
php如何获取类所有方法名

php如何获取类所有方法名php获取类所有方法名的方法:1、取得当前语句所在类的类名,代码为【get_class(classname)】;2、取得classname类的所有的方法名,代码为【get_class_methods(classname)】。【相关学习推荐:php编程(视频)】php获取类所有方法名的方法:1.获取行号、文件路径文件名、类名、方法名的常量__LIN

2024-10-21 14:44:41