php require 在类的继承中的坑
对于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

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Bekerja dengan pangkalan data dalam CakePHP adalah sangat mudah. Kami akan memahami operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam bab ini.

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Log masuk CakePHP adalah tugas yang sangat mudah. Anda hanya perlu menggunakan satu fungsi. Anda boleh log ralat, pengecualian, aktiviti pengguna, tindakan yang diambil oleh pengguna, untuk sebarang proses latar belakang seperti cronjob. Mengelog data dalam CakePHP adalah mudah. Fungsi log() disediakan
