Home php教程 php手册 php require 在类的继承中的坑

php require 在类的继承中的坑

Jun 13, 2016 am 10:56 AM
include php require use exist pit us document of kind inherit transfer

 对于php的文件调用,我们有时会为使用include, include_once, require, require_once而陷入斟酌,不仅初学者如此,高级工程是由也会有纠结的时候。而且至今使用哪一个为最优仍没有达成共识。每个团队每个项目有自己的代码规范,也有自己的使用理由。至于四个函数的异同,在此不作赘述。

  我们团队推崇使用的是require_once,为什么使用require_once而不是require呢。今日给出一个理由。

   require的使用在多个子类继承同一个父类时会引起redeclare的错误

 因为require不是一个方法,而是一个语句块。所以,他把把引用的文件执行一遍,所以,如果你在一个文件里引用了两个继承自同一父类的类时,由会引起上述问题。而require_once则不会,它会先判断是否引用过,苦有则略过。

  看代码,先写一个抽象父类:


[php]
AbstractClass.php 

AbstractClass.php

  再实现两个子类:


[php]
RequireClassA.php 
 
//使用require而不是require_once  
require 'AbstractClass.php'; 
class RequireClassA extends AbstractClass{ 
 

RequireClassA.php

//使用require而不是require_once
require 'AbstractClass.php';
class RequireClassA extends AbstractClass{

}

 

 

[php]
RequireClassB.php 
 
//使用require而不是require_once  
require 'AbstractClass.php';class RequireClassB extends AbstractClass{} 

RequireClassB.php

//使用require而不是require_once
require 'AbstractClass.php';class RequireClassB extends AbstractClass{}


  实现调用:

 

[php]
test.php 
 
require_once 'RequireClassB.php'; 
require_once 'RequireClassA.php'; 
$A = new RequireClassA(); 
$B = new RequireClassB(); 

test.php

require_once 'RequireClassB.php';
require_once 'RequireClassA.php';
$A = new RequireClassA();
$B = new RequireClassB();

 

 

  运行test.php报错
[plain]
>php test.php  
>PHP Fatal error:  Cannot redeclare class AbstractClass in /home/john/workspace/php/require/AbstractClass.php on line 2 

>php test.php
>PHP Fatal error:  Cannot redeclare class AbstractClass in /home/john/workspace/php/require/AbstractClass.php on line 2

 

 

Statement of this Website
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

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian

CakePHP Date and Time CakePHP Date and Time Sep 10, 2024 pm 05:27 PM

CakePHP Date and Time

CakePHP File upload CakePHP File upload Sep 10, 2024 pm 05:27 PM

CakePHP File upload

CakePHP Routing CakePHP Routing Sep 10, 2024 pm 05:25 PM

CakePHP Routing

CakePHP Project Configuration CakePHP Project Configuration Sep 10, 2024 pm 05:25 PM

CakePHP Project Configuration

Discuss CakePHP Discuss CakePHP Sep 10, 2024 pm 05:28 PM

Discuss CakePHP

CakePHP Quick Guide CakePHP Quick Guide Sep 10, 2024 pm 05:27 PM

CakePHP Quick Guide

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

How To Set Up Visual Studio Code (VS Code) for PHP Development

See all articles