是否可以在php中获取类内方法和属性的可见性?我希望能够做这样的事情:function__call($method,$args){if(is_callable(array($this,$method)){if(get_visibility(array($this,$method))=='private')//dosomethingelseif(get_visibility(array($this,$method))=='protected')//dosomethingelse//dosomething}} 最佳答案 is_calla
我仔细看了看,似乎找不到这个问题的答案。基本上,我使用_call方法动态生成get和set方法,但是在声明变量时,PHP的默认值是公开的。无论如何要将类中的变量声明为protected?function__call($method,$arguments){$prefix=strtolower(substr($method,0,3));$property=strtolower(substr($method,3));if(empty($prefix)||empty($property)){return;}if($prefix=="get"&&isset($this->$property))
给出这个例子:classDatabase{private$host,$database,$username,$password,$type;public$active_connection;//Somemethods}classPage{private$db;publicfunction__construct($id){//Somecode$this->db=newDatabase($id);}//SomeMethods}$page=newPage(0);var_dump($page);这将输出数据库对象的私有(private)变量,即使它们被标记为私有(private)(因此,据我所
注意到一些关于PHP类的东西,我不知道它是否是一个错误或者它为什么起作用,这是代码:echoProp();}privatefunctionechoProp(){echo'Prophasvalue:'.$this->prop;}}$obj=newA;$obj->fun();结果不是我预期的错误,因为我正在调用私有(private)方法(在PHP5.3.10-1ubuntu3.7上使用Suhosin-Patch测试)。结果是“Prophasvalue:value” 最佳答案 在php文档中http://www.php.net/manua
我发现PHP中的对象常量始终具有公共(public)可见性,因此无法像这样将它们设置为protected或私有(private):请问这是怎么解释的?我想不出强制常量公开的充分理由。 最佳答案 这是一个相当哲学的问题,在commentsforClassconstantsinthePHPManual中进行了讨论。.争论似乎是Visibility确定谁有权更改成员,而不是谁有权阅读他们。由于常量无法更改,因此当可见性被理解为访问修饰符时,让它们支持可见性是没有意义的。如果您遵循该论点或使用thelinkedfeaturerequestb
这是我从threads::shared上读到的描述:Bydefault,variablesareprivatetoeachthread,andeachnewlycreatedthreadgetsaprivatecopyofeachexistingvariable.Thismoduleallowsyoutosharevariablesacrossdifferentthreads...(more)假设我有一个这样的共享变量:my$var:shared;$var=10;这意味着对于我创建的所有线程,该变量只存在一次。现在关于原子性和可见性:如果thread_A分配了一个新值,比如说11:$v
根据JCP(16.2.2.安全发布):Thishappens-beforeguaranteeisactuallyastrongerpromiseofvisibilityandorderingthanmadebysafepublication.WhenXissafelypublishedfromAtoB,thesafepublicationguaranteesvisibilityofthestateofX,butnotofthestateofothervariablesAmayhavetouched.ButifAputtingXonaqueuehappens-beforeBfetches
上下文是:生产者(JTA事务PT)正在向JMS队列发送消息并进行数据库更新;consumer(JTAtransactionCT)在同一个队列上监听并在收到消息时读取DB;应用服务器-WebLogic,数据库-Oracle。我观察到,有时CT(还?)无法看到PT的数据库更改,如果已收到相应的JMS消息(PTpromise了吗?)。似乎JTA不能保证这种一致性(这在JurgenHoller的演讲“TransactionChoicesforPerformance”中也得到了证实)。避免此类问题的最佳方法是什么(明显的除外-不使用JTA)?谢谢。 最佳答案
前言:我要告诉你的是错误的,我很清楚我做这种愚蠢的事情破坏封装是多么糟糕。我不打算解决任何更一般的I/O问题。这只是一个实验。我正在尝试对sun.nio.ch.SourceChannelImpl进行子类化,这是包私有(private)类,在JDK(在rt.jar中)中存在包私有(private)构造函数,所以我必须在sun.nio.ch包。这是我的子类:packagesun.nio.ch;importjava.io.FileDescriptor;importjava.nio.channels.spi.SelectorProvider;classMySourceChannelextend
关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭7年前。Improvethisquestion为什么要使用包可见性(默认),除非类应该在java中公开