Home  >  Article  >  Backend Development  >  Include does not work when the php file name and class name are the same?

Include does not work when the php file name and class name are the same?

WBOY
WBOYOriginal
2016-07-06 13:53:351256browse

File name: Originally ValidationCode.php
After changing to validate.php, the verification code can be displayed normally.
The browser requests the code.php file to display the verification code

<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; $index<$this->num_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>

This question has been closed, reason: I have found the cause of the problem myself

Reply content:

File name: Originally ValidationCode.php
After changing to validate.php, the verification code can be displayed normally.
The browser requests the code.php file to display the verification code

<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; $index<$this->num_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>

Test: Entry Code

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

File name: Include does not work when the php file name and class name are the same?

Test results:
Include does not work when the php file name and class name are the same?

Conclusion: The file name has nothing to do with the class name when including. The result is OK. I don't know why yours can't. But I tested it and it's OK.

It’s really fake! References to file names and class names do not work, so magical! Are there any error messages

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn