如何修复php 7.1.3和jpgraph 4.2.6中的“Uncaught TypeError:Argument 1传递给JpGraphException :: defaultHandler()”问

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修复php 7.1.3和jpgraph 4.2.6中的“Uncaught TypeError:Argument 1传递给JpGraphException :: defaultHandler()”问相关的知识,希望对你有一定的参考价值。

我正在使用带有jpgraph的数据库的满意形式的图形,我遇到了一些处理程序错误的问题。

这是我的计划:

<?php
    require_once("./src/jpgraph.php");
    require_once("./src/jpgraph_pie.php");
    require_once("./src/jpgraph_pie3d.php");

    $db="questionnaire";
    try
    
    $bdd=new PDO('mysql:host=localhost;dbname='.$db,'root','');
    
    catch(Exception $exception)
    
    die('Erreur :'.$exception->getMessage());
    
    //var
    $req=$bdd->prepare('SELECT Adaptation1 FROM s3');
    // on execute la requete avec le contenu saisi 'user'

    $req->execute();    
    $valpour = 100;
    $comptage=array(
    "Vide"=>0,
    "Satisfaisante"=>0,
    "Inadaptee"=>0,
    "Incomplete"=>0);   
    /*$vide = cal_pour($comptage["Vide"],$comptage,$valpour);
    $Satisfaisante = cal_pour($comptage["Satisfaisante"],$comptage,$valpour);
    $Inadaptee = cal_pour($comptage["Inadaptee"],$comptage,$valpour);
    $Incomplete = cal_pour($comptage["Incomplete"],$comptage,$valpour);*/
    while ($donnees=$req->fetch(PDO::FETCH_ASSOC))
       
        foreach ($donnees as $indice=>$valeur)
        echo $valeur."<br/>";
        if ($valeur=="") $comptage["Vide"]++;
        else    $comptage[$valeur]++;
        
    

    /*function cal_pour($nombre,$total,$pourcentage)
     
     $resultat = ($nombre/$total) * $pourcentage;
    return round($resultat); // Arrondi la valeur
     */

    $data = array($comptage["Vide"],$comptage["Satisfaisante"],$comptage["Inadaptee"],$comptage["Incomplete"]);
    //print_r($data);
    $graph = new PieGraph(400,300);
    $theme_class= new VividTheme;
    $graph->SetTheme($theme_class);

    $graph->title->Set("Résultat Question PPN");

    $p1 = new PiePlot3D($data);
    $graph = Add($p1);
    $p1->ShowBorder();
    $p1->SetColor("green");
    $p1->ExplodeSlice(1);
    $graph->Stroke();
?>

这是我得到的错误:

致命错误:未捕获的TypeError:传递给JpGraphException的参数1 :: defaultHandler()必须是Exception的实例,在C:\ Users \ Stric \ Documents \ projet-tut \ projet-tut \ src \ jpgraph_errhandler.inc中给出Error的实例.php:158堆栈跟踪:#0 [内部函数]:JpGraphException :: defaultHandler(Object(Error))#1 main抛出C:\ Users \ Stric \ Documents \ projet-tut \ projet-tut \ src \第158行的jpgraph_errhandler.inc.php

这是相应的第158行:

 static public function defaultHandler(Exception $exception) 
        global $__jpg_OldHandler;
        if( $exception instanceof JpGraphException ) 
            $exception->Stroke();
        
        else 
            // Restore old handler
            if( $__jpg_OldHandler !== NULL ) 
                set_exception_handler($__jpg_OldHandler);
            
            throw $exception;
        
    

答案

只需将$graph = Add($p1);更改为$graph->Add($p1);,您的图表即可生效。

$p1 = new PiePlot3D($data);
$graph->Add($p1);  // this is where the change is
$p1->ShowBorder();
$p1->SetColor("green");
$p1->ExplodeSlice(1);
$graph->Stroke();

以上是关于如何修复php 7.1.3和jpgraph 4.2.6中的“Uncaught TypeError:Argument 1传递给JpGraphException :: defaultHandler()”问的主要内容,如果未能解决你的问题,请参考以下文章

使用 php 绘制 bargraph-jpgraph

PHP 画图——使用jpgraph画图

“jpgraph”不起作用,html 中没有错误

Jpgraph使用demo

PHP中使用Jpgraph生成统计图

Jpgraph类库简介