Doc #80149 [Com]: Mutually included files
Edit report at https://bugs.php.net/bug.php?id=80149&edit=1
ID: 80149
Comment by: marcio dot a dot siena at gmail dot com
Reported by: marcio dot a dot siena at gmail dot com
Summary: Mutually included files
Status: Feedback
Type: Documentation Problem
Package: Documentation problem
PHP Version: Irrelevant
Block user comment: N
Private report: N
New Comment:
Ok, I will not argue.
If you have to do a get_included_files() instead of simply and clearly see it stated in the docs, so
be it.
Thank you anyway.
Bye.
Previous Comments:
------------------------------------------------------------------------
[2020-09-26 19:38:32] requinix@php.net
The documentation does not say "...if the file has already been included by the use of
include/require/include_once/require_once()".
The fact is that a1 was included at the beginning *by PHP*. And that counts. And if you dump
get_included_files() inside a1 then you'll see a1 in the list of files.
------------------------------------------------------------------------
[2020-09-26 12:05:46] marcio dot a dot siena at gmail dot com
Hi.
Sorry if I was not clear.
The main file, a1.php, is the file *requested* by the browser.
Then it includes b1.php. Only THEN, from b1.php, a1.php (the originally requested file) is
included/required.
------------------------------------------------------------------------
[2020-09-25 13:05:04] danack@php.net
"but the require_once in b.php does not re-include a.php. But that behavior is not explicitly
stated in the relevant documentation pages:"
From the manual https://www.php.net/manual/en/function.require-once.php:
"The require_once statement is identical to require except PHP will check if the file has
already been included, and if so, not include (require) it again."
That is pretty clear to me. If you don't think it is, can you suggest where and how it should
be documented?
------------------------------------------------------------------------
[2020-09-25 13:01:09] marcio dot a dot siena at gmail dot com
More complete scripts:
a1.php:
------
<?php
echo "INSIDE a1.php <br><br>";
require_once($_SERVER['DOCUMENT_ROOT'] . "/b1.php");
?>
b1.php:
------
<?php
echo "INSIDE b1.php <br><br>";
require_once($_SERVER['DOCUMENT_ROOT'] . "/a1.php");
?>
------------------------------------------------------------------------
[2020-09-25 12:55:36] marcio dot a dot siena at gmail dot com
Description:
------------
The documentation does not talk about mutually included/required files.
Mutually included/required files: a.php requires (once) b.php, and b.php requires (once) a.php.
a.php is the "master" file. b.php is the included file. But what if b.php needs to
re-include a.php?
Use case: legacy application being refactored, tons of cases. HTTP requests may come to a.php or to
b.php, but both scripts depends upon each other.
When that occurs, as one may expected, a.php includes b.php, but the require_once in b.php does not
re-include a.php.
But that behavior is not explicitly stated in the relevant documentation pages:
- https://www.php.net/manual/en/function.require-once.php
- https://www.php.net/manual/en/function.include-once.php
So one must make tests to be sure about PHP's true behavior.
My proposition: state that behavior clearly in the docs.
Test script:
---------------
- in a.php: require_once('b.php');
- in b.php: require_once('a.php');
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=80149&edit=1
Thread (10 messages)