Включайте, потребуйте и require_once

Сегодня я попытался включать файл, который возвращает объект. Я всегда использую require_once, однако теперь я заметил странное поведение его.

Файл main.php

$lang = false;
$lang->name = "eng";
$lang->author = "Misiur";
$lang->text = "Text is test";
$lang->undefined = "Undefined";
return $lang;

Файл index.php

$lang = include('langs/eng/main.php');
var_dump($lang);
echo "<br />";
$lang = require('langs/eng/main.php');
var_dump($lang);
echo "<br />";
$lang = require_once('langs/eng/main.php');
var_dump($lang);

Результат

object(stdClass)#9 (4) { ["name"]=>  string(3) "eng" ["author"]=>  string(6) "Misiur" ["text"]=>  string(12) "Text is test" ["undefined"]=>  string(9) "Undefined" }
object(stdClass)#10 (4) { ["name"]=> string(3) "eng" ["author"]=> string(6) "Misiur" ["text"]=> string(12) "Text is test" ["undefined"]=> string(9) "Undefined" }
bool(true) 

Почему похож на это это? Я думал, что требуют, и require_once являются тем же самым, только require_once более безопасен, потому что это не копирует, включают.

Спасибо.

Править:

Но когда я использую только require_once, я получаю bool (верный) также. Таким образом, require_once возвращается, только результат включают, не это довольно?

Edit2:

LOL. Я не заметил, это ранее я потребовал этого файла в моем классе, который создается перед этим выполнением кода ($this-> файл = require_once ("langs/$name/main.php") ;)

Таким образом, require_once работал, как он должен.Спасибо, ребята!

7
задан Misiur 4 June 2010 в 14:20
поделиться

4 ответа

Когда вы используете include и требуете, вы получаете результат включения страницы, на которую вы ссылаетесь. Когда вы используете require_once он проверяет и видит, что страница уже загружена с помощью require, поэтому он возвращает true, чтобы сообщить вам, что она была успешно загружена в какой-то момент.

11
ответ дан 6 December 2019 в 11:46
поделиться

Это именно то, и вы пытаетесь продублировать включение. Когда вы require_once что-то, что не было включено или не требовалось ранее, вы получите возвращаемое значение.

РЕДАКТИРОВАТЬ: С помощью этого простого теста на PHP 5.3.2 я получаю возвращаемое значение при первом использовании require_once .

parent.php:

<?php
$first = require_once("child.php");
var_dump($first);
$second = require_once("child.php");
var_dump($second);
?>

child.php:

<?php
return "foo";
?>

Он выводит:

string(3) "foo"
bool(true)
7
ответ дан 6 December 2019 в 11:46
поделиться

Никогда не используйте return с include. Не возвращайте anting и не присваивайте никакой переменной.

-1
ответ дан 6 December 2019 в 11:46
поделиться

Я предполагаю, что у вас есть открывающий и закрывающий теги для обоих файлов? В документации PHP на include есть упоминания об этом. Посмотрите пример №5 на этой странице.

Похоже, что include , require и require_once имеют одинаковую функциональность, просто require выдает ошибку вместо предупреждения, а require_once - нет » t duplicate - включить файл.

0
ответ дан 6 December 2019 в 11:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: