Heim  >  Artikel  >  Backend-Entwicklung  >  php文件名和类名相同时include不起作用?

php文件名和类名相同时include不起作用?

WBOY
WBOYOriginal
2016-07-06 13:53:351257Durchsuche

文件名:原来为ValidationCode.php
修改为validate.php后可以正常显示验证码,
浏览器中请求code.php文件中进行显示验证码

<code><?php class ValidationCode{
        private $width;
        private $height;
        private $num_chars;
        private $image;
        const BORDER = 1;

        function __construct($width=60,$height=20,$num_chars=4){
            $this->width = $width;
            $this->height = $height;
            $this->num_chars = $num_chars;
        }
        
        function showImage(){
            $this->createImage();
            $this->drawBorder();
            $this->drawChars();
            $this->outPic();
        }
        
        //create canvas
         function createImage(){
            $this->image = imagecreate($this->width,$this->height);
            //$rand_color = imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
            $back = imagecolorallocate($this->image,0,0,0);
            $border = imagecolorallocate($this->image,255,255,255);
            imagefill($this->image,0,0,$back);
            //imagefilledrectangle($thid->image,self::BORDER,self::BORDER,$this->width-self::BORDER,$this->height-self::BORDER,$border);
            //imageline($this->image,1,1,100,100,$rand_color);
            //$this->outPic();
        }

        //draw border
        private function drawBorder(){
            $outer_bg_color = imagecolorallocate($this->image,0,0,0);
            $inner_bg_color = imagecolorallocate($this->image,255,255,255);
            imagefill($this->image,0,0,$outer_bg_color);
            imagefilledrectangle($this->image,self::BORDER,self::BORDER,$this->width-self::BORDER-1,$this->height-self::BORDER-1,$inner_bg_color);

        }        
    
        //create char content
          function createChar(){
            $rand_ascii="";
            $rand_type = rand(0,2);
            switch($rand_type){
                case 0:
                    $rand_ascii = rand(48,57);  
                   break;
                case 1:
                     $rand_ascii = rand(65,90);
                   break;
                case 2:
                     $rand_ascii = rand(97,122);
                   break;
            }
            $rand_str = sprintf("%c",$rand_ascii);
            return $rand_str;
        }
    
    
    
        //draw char
         private function drawChars(){
            $x = $this->width/$this->num_chars+1;
            $y = $this->height/2;
            for($index = 0; $indexnum_chars; $index++){
                $rand_color = imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
                imagechar($this->image,3,$x*$index+2,$y-$y/2,$this->createChar(),$rand_color);
            }
        }

        //out pic
        private function outPic(){
            header("content-type:image/png");
            imagepng($this->image);
        }
        

         function __destruct(){
             imagedestroy($this->image);
         }
    }
    
    /*$code = new ValidationCode();
    //echo $code->createChar();
    $code->showImage();*/
?></code>

code.php

<code><?php require_once("validate.php");
    $code = new ValidationCode();
    //echo $code->createChar();
    $code->showImage();
  ?></code>

这个问题已被关闭,原因:已经自己找到问题原因

回复内容:

文件名:原来为ValidationCode.php
修改为validate.php后可以正常显示验证码,
浏览器中请求code.php文件中进行显示验证码

<code><?php class ValidationCode{
        private $width;
        private $height;
        private $num_chars;
        private $image;
        const BORDER = 1;

        function __construct($width=60,$height=20,$num_chars=4){
            $this->width = $width;
            $this->height = $height;
            $this->num_chars = $num_chars;
        }
        
        function showImage(){
            $this->createImage();
            $this->drawBorder();
            $this->drawChars();
            $this->outPic();
        }
        
        //create canvas
         function createImage(){
            $this->image = imagecreate($this->width,$this->height);
            //$rand_color = imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
            $back = imagecolorallocate($this->image,0,0,0);
            $border = imagecolorallocate($this->image,255,255,255);
            imagefill($this->image,0,0,$back);
            //imagefilledrectangle($thid->image,self::BORDER,self::BORDER,$this->width-self::BORDER,$this->height-self::BORDER,$border);
            //imageline($this->image,1,1,100,100,$rand_color);
            //$this->outPic();
        }

        //draw border
        private function drawBorder(){
            $outer_bg_color = imagecolorallocate($this->image,0,0,0);
            $inner_bg_color = imagecolorallocate($this->image,255,255,255);
            imagefill($this->image,0,0,$outer_bg_color);
            imagefilledrectangle($this->image,self::BORDER,self::BORDER,$this->width-self::BORDER-1,$this->height-self::BORDER-1,$inner_bg_color);

        }        
    
        //create char content
          function createChar(){
            $rand_ascii="";
            $rand_type = rand(0,2);
            switch($rand_type){
                case 0:
                    $rand_ascii = rand(48,57);  
                   break;
                case 1:
                     $rand_ascii = rand(65,90);
                   break;
                case 2:
                     $rand_ascii = rand(97,122);
                   break;
            }
            $rand_str = sprintf("%c",$rand_ascii);
            return $rand_str;
        }
    
    
    
        //draw char
         private function drawChars(){
            $x = $this->width/$this->num_chars+1;
            $y = $this->height/2;
            for($index = 0; $indexnum_chars; $index++){
                $rand_color = imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
                imagechar($this->image,3,$x*$index+2,$y-$y/2,$this->createChar(),$rand_color);
            }
        }

        //out pic
        private function outPic(){
            header("content-type:image/png");
            imagepng($this->image);
        }
        

         function __destruct(){
             imagedestroy($this->image);
         }
    }
    
    /*$code = new ValidationCode();
    //echo $code->createChar();
    $code->showImage();*/
?></code>

code.php

<code><?php require_once("validate.php");
    $code = new ValidationCode();
    //echo $code->createChar();
    $code->showImage();
  ?></code>

测试:入口代码

<code><?php require_once("ValidationCode.php");//include_once("ValidationCode.php");
$code = new ValidationCode();
//echo $code->createChar();
$code->showImage();</code>

文件名:php文件名和类名相同时include不起作用?

测试结果:
php文件名和类名相同时include不起作用?

结论:include的时候文件名跟类名没有关系。结果是可以的。我不知道你的为什么不可以。但是我测了是可以的。

真的假的啊!文件名和类名一样引用不起作用,这么神奇!有没有出什么错误提示

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn