Constructor initialisiert Klassenmember nicht

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Jungbluth

Mitglied
Hallo,
ich habe eine Klasse geschrieben und diese scheint scheinbar den Constructor nicht richtig zu verarbeiten.
Wenn ich die klasse initialisiere kriege ich nicht nur den etliche Fehlermeldungen zu angeblich undefinierten Variablen, sondern scheinbar wird eine Variable auch fast initialisiert.
Code:
Warning: Undefined variable $pdo in C:\xampp\htdocs\wowimagecreator\imagebuilder\characterImageBuilder.php on line 16

Warning: Undefined variable $wowprofiler in C:\xampp\htdocs\wowimagecreator\imagebuilder\characterImageBuilder.php on line 17

Warning: Undefined variable $gearscore in C:\xampp\htdocs\wowimagecreator\imagebuilder\characterImageBuilder.php on line 18

Warning: Undefined variable $font in C:\xampp\htdocs\wowimagecreator\imagebuilder\characterImageBuilder.php on line 19

Warning: Undefined variable $fontBold in C:\xampp\htdocs\wowimagecreator\imagebuilder\characterImageBuilder.php on line 20

Warning: Undefined variable $pdo in C:\xampp\htdocs\wowimagecreator\imagebuilder\characterImageBuilder.php on line 25
string(56) "C:/xampp/htdocs/wowimagecreator/imagebuilder/arialbd.ttf"
Warning: Undefined variable $pdo in C:\xampp\htdocs\wowimagecreator\imagebuilder\characterImageBuilder.php on line 26

Fatal error: Uncaught Error: Call to a member function query() on string in C:\xampp\htdocs\wowimagecreator\imagebuilder\characterImageBuilder.php:26 Stack trace: #0 C:\xampp\htdocs\wowimagecreator\imagebuilder\characterImageBuilder.php(108): CharacterImageBuilder->GetData('antialki') #1 C:\xampp\htdocs\wowimagecreator\modules\character.php(5): CharacterImageBuilder->CreateOpenGraphImage('antialki') #2 C:\xampp\htdocs\wowimagecreator\index.php(12): include('C:\\xampp\\htdocs...') #3 {main} thrown in C:\xampp\htdocs\wowimagecreator\imagebuilder\characterImageBuilder.php on line 26

PHP:
<?php
include "./wowprofiler/wowprofiler.php";
include "./wowprofiler/gearscore.php";
use wowprofiler\wowprofiler;
use wowprofiler\gearscore;


class CharacterImageBuilder{
    private $pdo;
    private $wowprofiler;
    private $gearscore ;
    private $font;
    private $fontBold;

    public function __construct($url, $realm, $pathToFont){
        $this->$pdo = new PDO("mysql:host=localhost;dbname=423_wowimagecreator", "root", "");
        $this->$wowprofiler = new wowprofiler($url,$realm);
        $this->$gearscore = new gearscore();
        $this->$font = $pathToFont."/arial.ttf";
        $this->$fontBold = $pathToFont."/arialbd.ttf";
    }

    private function GetData($charactername){
        $charactername = lcfirst(urldecode($charactername));
        var_dump($this->$pdo);
        $query = $this->$pdo->query("SELECT * FROM character_cache WHERE name = '".$charactername."'");
        var_dump($this->$pdo->errorinfo());
        $fetch;
        if($query){
            $fetch = $query->fetch(PDO::FETCH_ASSOC);
        }
        if(!empty($fetch) && time() < $fetch["expired_at"]){
            return $fetch;
        }
        try{
            $char = $wowprofiler->GetCharacter($charactername);
        }
        catch(Exception $e){
            header("HTTP/1.0 404 Not Found");
            exit();
        }
        $profilerpage = file_get_contents("https://db.rising-gods.de/?profile=eu.rising-gods.".$charactername);
        //var_dump($profilerpage);
        $matches = [];
        preg_match('/<meta property="og:image" content=".*">/mi',$profilerpage,$matches);
        preg_match("|https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)|",$matches[0],$matches);
        preg_match("|[^\/]+$|",$matches,$characterImage);
        $textheadline = $char["prefix"] . " " . $char["name"] . " " . $char["suffix"];
        $texttalents;
        if($char["talents"][0]["active"]){
            $texttalents = $char["talents"][0]["points"];
        }
        else{
            $texttalents = $char["talents"][1]["points"];
        }
        $textraceclass = $char["race"] . " " . $char["class"];
        $level = $char["level"];
        $textgearscore = $gearscore->calculateGearScore($char);
        $expired_at = time() + 7200;
        if(empty($fetch)){
            $this->$pdo->query("INSERT INTO `character_cache` (`name`, `characterImage` `textheadline`, `texttalents`, `textraceclass`, `level`, `gearscore`, `expired_at`) VALUES ('".$charactername."', '".$characterImage[0]."', '".$textheadline."', '".$texttalents."', '".$textraceclass."', '".$level."', '".$textgearscore."', '".$expired_at ."');");
        }
        else{
            $this->$pdo->query("UPDATE `character_cache` SET `name` = '".$charactername."', `characterImage` = '".$characterImage[0]."', `textheadline` = '".$textheadline."', `texttalents` = '".$texttalents."', `textraceclass` = '".$textraceclass."', `level` = '".$level."', `gearscore` = '".$textgearscore."', `expired_at` = '".$expired_at."' WHERE `character_cache`.`name` = '".$charactername."';");
        }
        return array("characterImage" => $characterImage, "textheadline" => $textheadline, "texttalents" => $texttalents, "textraceclass" => $textraceclass, "level" => $level, "textgearscore" => $textgearscore, "expired_at" => $expired_at);
    }

    private function CreatePortrait($characterData = array()){
        $logo = imagecreatefromjpeg("./characterImages/".$characterData["characterImage"]);
        $image = imagecreatetruecolor(84,96);
        $white = imagecolorallocate($image, 255, 255, 255);
        $black = imagecolorallocate($image, 0 , 0, 0);
        $pos_level = 35;
        if($level < 10){
            $pos_level = 39;
        }
        imagefill($image, 0, 0, $this->$white);
        imagecopymerge($image,imagescale($logo,84),0,0,0,0,84,84,100);
        imagefilledellipse($image,43,80,30,30,$this->$black);
        imageellipse($image,43,80,28,28,$this->$white);
        imagettftext($image,12,0,$pos_level,87,$white,$this->fontBold,$level);
        //imageantialias($image,true);
        return $image;
    }

    public function CreateFullImage($charactername){
        $characterData = $this->GetData($charactername);
        $portrait = $this->CreatePortrait($characterData);
        $image = imagecreatetruecolor(600,100);
        $white = imagecolorallocate($image, 255, 255, 255);
        $black = imagecolorallocate($image, 0 , 0, 0);
        imagefill($image, 0, 0, $this->$white);
        imagecopymerge($image,$portrait,0,0,0,0,84,84,100);
        imagefilledellipse($image,43,80,30,30,$this->$black);
        imageellipse($image,43,80,28,28,$this->$white);
        //imageantialias($image,true);
        imagettftext($image, 18, 0, 90, 20, $this->$black, $this->$fontBold, $textheadline);
        imagettftext($image,12,0,100,45,$this->$black, $this->$font, $textraceclass);
        imagettftext($image,12,0,100,65,$this->$black, $this->$font,$texttalents);
        if($char["level"] == 80){
            imagettftext($image,12,0,250,45,$this->$black,$this->$font,"Gearscore: ".$textgearscore);
        }
        return $image;
    }

    public function CreateOpenGraphImage($charactername){
        return $this->CreatePortrait($this->GetData($charactername));
    }

    public function ConvertToBase64($image){
        ob_start();
        imagepng($image);
        $image_data = ob_get_contents();
        ob_end_clean ();
        return "data:image/png;base64,".base64_encode($image_data);
    }
}
 
Zuletzt bearbeitet:
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Zurück