如何使用其他类中的PHP魔法常量?
我在文件如何使用其他类中的PHP魔法常量?,php,debugging,Php,Debugging,我在文件info.php中创建了以下函数,用于在页面加载期间调试变量和数据 class Info { static function watch($what,$msg='',$more=FALSE) { echo "<hr/>"; echo "<br/>".$msg.":"; if( is_array($what) || is_object($what) ) { ec
info.php
中创建了以下函数,用于在页面加载期间调试变量和数据
class Info {
static function watch($what,$msg='',$more=FALSE)
{
echo "<hr/>";
echo "<br/>".$msg.":";
if( is_array($what) || is_object($what) )
{
echo "<pre>";
print_r($what);
echo "</pre>";
}
else{
echo $what;
}
if($more)
{
echo "<br/>METHOD:".__METHOD__;
echo "<br/>LINE:".__LINE__;
}
}
}
一切正常,但方法和线条如下所示
METHOD: Testpost::gtPostdata()
LINE:5( where this function is called in Testpost class)
但我想在下面展示
<?php
class Info {
static function watch($what,$msg='',$more=FALSE)
{
echo "<hr/>";
echo "<br/>".$msg.":";
if( is_array($what) || is_object($what) )
{
echo "<pre>";
print_r($what);
echo "</pre>";
}
else{
echo $what;
}
if($more)
{
$backtrace = debug_backtrace();
if (isset($backtrace[1]))
{
echo "<br/>METHOD:".$backtrace[1]['function'];
echo "<br/>LINE:".$backtrace[1]['line'];
}
}
}
}
那么,如果我将$more=TRUE
放入watch()
中,那么方法和行号应该与调用它的类保持一致,该怎么做呢
我可以在监视方法中使用self::
或parent::
??还是别的什么
请建议我如何从其他类调用magic常量,或者是否有其他方法来调试varaibale??(请不要建议使用
Xdebug
或任何其他工具)您不能在该范围内使用这些常量。请检查函数debug\u backtrace()。如果它给你太多的信息,试着解析它 您不能使用该范围中的那些常量。请检查函数debug\u backtrace()。如果它给你太多的信息,试着解析它 您必须使用php函数
你也有以下问题的解决方案。享受!:)
您必须使用php函数
你也有以下问题的解决方案。享受!:)
debug\u bactrace是完全自动化的唯一方法,但它是一个“繁重”的功能。。。。执行速度非常慢,需要解析以提取所需信息。这可能看起来很麻烦,但更好的解决方案是将必要的信息传递给您的Info::watch方法:
类信息{
静态函数监视($whereClass、$whereLine、$what、$msg=''、$more=FALSE)
{
回声“
”;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
回显“
”。$msg.:”;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
if(is_数组($what)| is_对象($what))
{
回声“;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
打印(什么);
回声“;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
}
否则{
回声$什么;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
}
如果(更多美元)
{
echo“
方法:”.$whereClass;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
回声“
行:.$whereLine;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
}
}
}
现在,我从另一个页面index.php调用这个方法,其中包含info.php
类Testpost{
__construct(){//一些基本初始化}
函数getPostdata($postarray){
$postarray=$\u POST;
信息::watch(_方法,_线,$postarray,'postarray',TRUE);
}
debug\u bactrace是完全自动化的唯一方法,但它是一个“重载”函数……执行速度非常慢,需要解析以提取所需信息。它可能看起来很麻烦,但更好的解决方案是将必要的信息传递给您的Info::watch方法:
类信息{
静态函数监视($whereClass、$whereLine、$what、$msg=''、$more=FALSE)
{
回声“
”;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
回显“
”。$msg.:”;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
if(is_数组($what)| is_对象($what))
{
回声“;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
打印(什么);
回声“;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
}
否则{
回声$什么;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
}
如果(更多美元)
{
echo“
方法:”.$whereClass;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
回声“
行:.$whereLine;
class Testpost {
__construct() { // some basic intializtion }
function getPostdata($postarray) {
$postarray=$_POST;
Info::watch($postarray,'POST ARRAY', TRUE);
}
}
}
}
现在,我从另一个页面index.php调用这个方法,其中包含info.php
类Testpost{
__construct(){//一些基本初始化}
函数getPostdata($postarray){
$postarray=$\u POST;
信息::watch(_方法,_线,$postarray,'postarray',TRUE);
}
为什么你使用了$backtrace[1]
,难道我们不能使用$backtrace[0]
??我想如果我使用$backtrace[0]['line']
它会给出正确的行号$backtrace[0]
它是“你自己”,就像在类本身一样。$backtrace[1]
显示调用信息的方法调用的行为什么您使用了$backtrace[1]
,我们不能使用$backtrace[0]
??我已经计算出,如果我使用$backtrace[0]['line']
它会给出正确的行号$backtrace[0]
它是“你自己”,就像在类本身一样。$backtrace[1]
显示了调用信息的方法调用的行,我已经在代码中这样做了,但是每次我都要写\uuuuu方法\uuuuu
和\uuu行\uuuuuuuu
,这就是我问问题的原因。无论如何,谢谢你的回答,我已经在代码中做了,但我必须写\uu方法\uuuuuuu
和\uuuu行每次,这就是我问这个问题的原因。无论如何,谢谢你的回答