Этот урок набрал набрал достаточно большое количество
комментариев и дальнейшее его комментирование отключено.
Если вы хотели убедиться в правильности выполнения ДЗ или у вас возник вопрос по уроку,
посмотрите ранее добавленные комментарии, кликнув по кнопке ниже. Скорее всего вы найдете там то, что искали.
Если это не помогло - задайте вопрос в чате в телеграме - https://t.me/php_zone
Ну что же вы не осилили документацию?) В задании же написано что сначала нужно изучить.
P.S. Если уж совсем лень, то смотрите пункт "Выражения include и return". На момент написания данного комментария это "Пример #5".
У вас на редкость хорошие уроки, среди мегатонн разной хрени по интернету. Сужу по тому, что рекомендуете всегда пользоваться DIR при подключении. Многим это неведомо.
Нет, первый вариант правильный. Использование результата include или return нужно в случае, когда подключаемый файл возвращает что-либо через return. Иначе - результатом подключения файла будет 1.
$x = include __DIR__ . '1.php'; // $x == 1
Если же в файле 1.php будет что-то типа:
return 2 + 3;
То в таком случае в $x попадёт 5.
Для подключения шаблонов внутри других шаблонов можно просто писать
Такой вопрос.
Вижу тут нужно было до этого пройти курс по хтмл, я его не проходил ещё, вернее несколько месяцев назад хотел пройти, но забросил, знаю кое-что. Стоит ли его сейчас пройти? Либо это всё можна подхватить по ходу дела, просто уже начал php, чувствую что если начну html, то когда вернусь к php снова, многое из курса выпадет из головы. Посоветуйте как быть.
А почему вот эта строчка:
$varInc = require 'footer.php';
Является аналогом вот этой:
require './footer.php';
?
Не знаю, правда, можно ли это коротко объяснить будет)
так как во всех операционных системах общее правило для каталогов (папок):
../ - это обращение к каталогу один уровень вверх
./ - это обращение к каталогу в котором находимся.
По умолчанию считается, что если перед именем файла ничего не указано, например footer.php, то это равнозначно ./footer.php
Это я понимаю. Вопрос немного не в этом был. Когда я пишу в коде вот эту строчку:
$varInc = require 'footer.php';
То у меня подключается файл footer.php
Точно также, как он подключается, когда я пишу вот это:
require './footer.php';
То есть в первом случае я как бы просто инициализирую переменную $varInc и больше ничего не делаю, но при этом у меня происходит подключение файла, как-то это нелогично. То есть обе эти строки по отдельности делают одно и тоже. Может у меня что не так работает_))
require 'footer.php' - помимо собственно подключения файла footer.php, всегда возвращается еще и результат этого действия, просто в первом случае Вы его используете передавая в переменную и потом сравнив можете что-то еще сделать: повесить функцию, выдать сообщение и т.п., а во втором случае просто не используете.
<?php
?>
<html>
<head>
<title>Особенности использования include</title>
</head>
<body>
<? $str = include __DIR__.'/string.php'; echo $str; ?>
<!--выведем строку так как в string.php есть return -->
<br>
<? $str = include __DIR__.'/no_string.php'; echo $str; echo '<br>'.$stringText ?>
<!-- сначала выведем 1, файл no_string.php успешно подключен, а потом переменную
stringText -->
<br>
</body>
</html>
В index.php теги PHP в начале файла ни к чему. Закрывающий тег в файлах, в которых только PHP-код, не ставится. Можете погуглить почему. И спасибо что помогли ученику выше :)
Интересно, правильный ли мой вариант..
В index.php я добавил код:
$var = include __DIR__ . '/file.php';
В file.php я добавил:
<?php
$social = 'Социальные кнопки для FOOTER';
return $social;
?>
И теперь в footer.php вставил в специальном нужном мне месте:
<?= $var ?>
И всё работает. Получается из footer.php идет обращение к переменной $var, которая находится в index.php и в которую был положен file.php, а в file.php уже то что мне нужно, чтоб вывелось в footer.php в нужном месте. Но возник сразу вопрос, правильно ли это? Потому как в file.php могут быть разные переменные и разные данные и тогда в нужном мне месте выведет кучу информации, которая не актуальна для того места. Как тогда быть?
Всё правильно. А для того чтобы были только нужные переменные в нужном месте, стоит подключать файлы там, где они непосредственно нужны (в твоем примере подключать file.php внутри footer.php)
насколько я понял мы можем с помощью include в нужных местах выводить информацию которая будет хранится на отдельном файле,и до вызова include не будет видна не кому
Чтобы использовать результаты вычислений в других файлах. Можно вынести какую-то логику в отдельный файл и использовать возвращаемое значение. Сейчас к такому редко прибегают, так как есть функции и методы, позволяющие выносить логику в более удобные компоненты.
Не в своей. Почитайте документацию. В лучшем случае он будет смотреть туда же, откуда был запущен весь код.
То есть если создать такую структуру файлов и папок:
www
L index.php
L 1/
L 1.php
L 1/
L 1.php
И написать следующий код в файлах:
www/index.php
<?php
include '1/1.php';
www/1/1.php
<?php
include '1/1.php';
www/1/1/1.php
<?php
echo 42;
То всё сломается, потому что в файле www/1/1.php инклуд будет работать от папки www.
На экран вышло: Это просто заглушка1;
То есть $config получила значение 1 поскольку подключился файл успешно и вернулось TRUE, если был бы return то можно вернуть значение переменной
<?php
$content = '<h1>Заголовок страницы</h1> Содержимое страницы';
$header = '<h1> Заголовок шапки</h1> мини описание шапки';
$button = '<h3>Курсы PHP.Zone</h3> Обучайся программированию на портале PHP.Zone';
$footer = '<h3> КОНТАКТЫ</h3> Друг, да именно ты, не забудь подписатся в социальных сетях, а также на канал PHP.Zone в телеге, там много интересно!';
$config = include 'config.php';
echo $config;
require __DIR__ . '/Header.php';
require __DIR__ . '/Sidebar.php';
require __DIR__ . '/Content.php';
require __DIR__ . '/Footer.php';
Подскажите, пожалуйста, как исправить следующую ошибку :
Cannot save D:\OSPanel\domains\myproject.loc\www\functions.php.
Unable to create a backup file (functions.php~).
The file left unchanged.
Суть кода $var = include 'file.php' - будет обозначать подключение определенного файла и будет выводит те значение которые мы написали пусть это будет return, echo или любое значение. При подключение файла в переменную $var, мы сможем прописать эту переменную где угодно и будет выводить результаты которые мы обозначили в данном файле... (Конечно если понятно объяснил :/ - я прочитал документацию и понял суть). Спасибо огромное за данный урок! :)
Пример кода:
//includePhp.php
$var = "This my first text!";
return $var; //При указаний echo ещё будет выводить 1 возле текста
//MainPage.php
$includeText = include __DIR__ . '/includePhp.php'; //В документации указано без "__DIR__" без него у меня ошибка :/
echo $includeText; //Выведет текст с подключаемого файла includePhp.php
Выражения $var = include 'file.php';
Если мы просто подключаем файл без переменной, то выводиться содержимое файла.
Если используем переменную, но в файле file.php нет ни return ни echo, то при вызове переменной выведется содержимое файла и единица, так как подключение было успешным.
Если в файле file.php есть return или echo, то в переменную запишется какое то значение которое можно использовать.
Всё верно?
Не знаю кем и для кого была написана эта документация, но для меня она совершенно не информативна. Я больше из комментариев узнаю, которые я прочитал, сам попробовал потыкать и написал итог. Но если это не правильно, тогда такой вариант:
Переменную $var мы можем использовать как отображение успешности подключения файла либо успешности выполнения кода в файле. Если нет в подключаемом файле return.
Или если в подключаемом файле есть return, то можно вернуть значение переменной или функции и присвоить ее в $var. Чтобы затем использовать $var в других местах.
А что интересно делать если в файле много return(ов). Что тогда возвращается?
Немного не понял, зачем создавать переменную в index с содержанием, допустим, main , потом подключать файл(допустим content.php), который её же и вызывает. Практический смысл этого будет понятен далее? Пока что в первой и второй части домашки я вижу нагромождение в файле index.
Смысл в том, чтобы вы поняли, что эти переменные можно использовать в подключенных файлах. Ровно как и то, что переменные, определенные в подключенных файлах будут доступны и в том месте, где файлы подключили.
Добрый день!
Макет сайта. Через переменные можно менять контент, высоту колонок, менять и добавлять пункты меню.
index.php
<?php
$content = '<h1>London</h1><p>London is the capital city of England.
It is the most populous city in the United Kingdom,
with a metropolitan area of over 13 million inhabitants.</p>
<p>Standing on the River Thames, London has been a major settlement for two millennia,
its history going back to its founding by the Romans, who named it Londinium.</p>';
$height = 'height: 300px';//column height
$the_cities1 = 'London';
$the_cities2 = 'Paris';
$the_cities3 = 'Tokyo';
$the_cities4 = '';//free to fill
$the_cities5 = '';//free to fill
require __DIR__ . '/header.php';
require __DIR__ . '/nav.php';
require __DIR__ . '/article.php';
require __DIR__ . '/footer.php';
header.php
<!DOCTYPE html>
<html>
<head>
<meta name="keywords" content="" />
<meta name="description" content="" />
<title>CSS Template</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
header {
background-color: #666;
padding: 10px;
text-align: center;
font-size: 35px;
color: white;
}
/* Create two columns/boxes that floats next to each other */
nav {
float: left;
width: 30%;
<?= $height ?>;
background: #ccc;
padding: 20px;
}
/* Style the list inside the menu*/
nav ul {
list-style-type: none;
padding: 0;
}
article {
float: left;
padding: 20px;
width: 62.9%;
background-color: #f1f1f1;
<?= $height ?>;
}
/* Clear floats after the columns */
section {
height: 100%;
clear: both;
}
body > div{
clear: both;
}
html {
height: 100%;
}
article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary {
display: block;
}
body {
margin: 0 auto;
font: 12px/18px Arial, sans-serif;
width: 100%;
height: 100%;
}
.wrapper {
margin: 0 auto;
min-height: 100%;
}
footer {
clear: both;
background-color: #777;
height: 50px;
margin: 50px auto 0;
text-align: center;
color: white;
}
</style>
</head>
<body>
<div class="wrapper">
<header>
<h2>Cities</h2>
</header>
С файлами вопросов нет. По этому заданию:
Изучите официальную документацию по include и изучите как можно использовать выражения вида
$var = include 'file.php';
Насколько я понял такая запись добавляет значение файла в переменную.
Если в файле была вызван return, при echo выведется то, что было возвращено функцией return.
Если не было return, то выдаст значение 1.
Нужно оформить код в комментарии (в редакторе комментариев самая первая кнопка).
Нажмите на карандашик и поправьте ваш комментарий, пожалуйста. А потом ответьте мне на этот комментарий. После этого проверю вашу домашнюю работу и отвечу на вопросы.
данная инструкция подходит для возврата и обработки подключаемого файла, то есть
мы не просто подключаем файл и он что-то делает, мы его возвращаем как-то используем либо проверяем файл, а если не возвращаем то в переменной будет 1 (означает что файл успешно подключен, но он ничего не возвращает).
Ну и анологично с контентом и сайтбаром, только вот шторм почему то меня материт в файле index, типа переменные не определены, но файлы то я подключил и на сайте всё работает скрин ошибкискрин локального проекта
Когда следующий урок?)
В эти выходные запилю, обещаю)
В задании:
Необычный результат получается.
Показывает int(1) 1
На экран вывел целую таблицу (header.php как в примерах выше)
Ну что же вы не осилили документацию?) В задании же написано что сначала нужно изучить.
P.S. Если уж совсем лень, то смотрите пункт "Выражения include и return". На момент написания данного комментария это "Пример #5".
У вас на редкость хорошие уроки, среди мегатонн разной хрени по интернету. Сужу по тому, что рекомендуете всегда пользоваться DIR при подключении. Многим это неведомо.
Спасибо)
Типа такого должно получится?
index.php
sitedar.php
Типа того, только закомментированные строчки кода ни к чему.
Или так?
Нет, первый вариант правильный. Использование результата include или return нужно в случае, когда подключаемый файл возвращает что-либо через return. Иначе - результатом подключения файла будет 1.
Если же в файле 1.php будет что-то типа:
То в таком случае в $x попадёт 5.
Для подключения шаблонов внутри других шаблонов можно просто писать
Отличные уроки - лучшее что удалось найти в сети
Спасибо :)
А константа DIR присутствует только в OpenServer? Я Ваши примеры и задания выполняю в Ubuntu 16.04 (Apache2, PHP7.0) и DIR никак не проходит.
Всё нашёл в официальной документации по PHP. Извиняюсь за беспокойство. :)
Хорошо, привыкайте читать документацию ;)
Такой вопрос.
Вижу тут нужно было до этого пройти курс по хтмл, я его не проходил ещё, вернее несколько месяцев назад хотел пройти, но забросил, знаю кое-что. Стоит ли его сейчас пройти? Либо это всё можна подхватить по ходу дела, просто уже начал php, чувствую что если начну html, то когда вернусь к php снова, многое из курса выпадет из головы. Посоветуйте как быть.
Если основы HTML хоть чуть-чуть изучали, то можете продолжать.
Отлично!
На 4 переменные для каждого блока фантазии не хватило)
В переменных теги не нужны - их нужно хранить в шаблоне.
Тогда не нужно было самому показывать такой пример в данном уроке:
Потому как глядя на тебя, я тоже стал использовать теги в переменных.
Сорри, всё правильно)
test.
Сорян, я упоролся, всё нормально, это же контент страницы)
А почему вот эта строчка:
$varInc = require 'footer.php';
Является аналогом вот этой:
require './footer.php';
?
Не знаю, правда, можно ли это коротко объяснить будет)
так как во всех операционных системах общее правило для каталогов (папок):
../ - это обращение к каталогу один уровень вверх
./ - это обращение к каталогу в котором находимся.
По умолчанию считается, что если перед именем файла ничего не указано, например footer.php, то это равнозначно ./footer.php
Это я понимаю. Вопрос немного не в этом был. Когда я пишу в коде вот эту строчку:
$varInc = require 'footer.php';
То у меня подключается файл footer.php
Точно также, как он подключается, когда я пишу вот это:
require './footer.php';
То есть в первом случае я как бы просто инициализирую переменную $varInc и больше ничего не делаю, но при этом у меня происходит подключение файла, как-то это нелогично. То есть обе эти строки по отдельности делают одно и тоже. Может у меня что не так работает_))
require 'footer.php' - помимо собственно подключения файла footer.php, всегда возвращается еще и результат этого действия, просто в первом случае Вы его используете передавая в переменную и потом сравнив можете что-то еще сделать: повесить функцию, выдать сообщение и т.п., а во втором случае просто не используете.
Ага, вроде понял, спасибо
test
//index.php
//string.php
//no_string.php
В index.php теги PHP в начале файла ни к чему. Закрывающий тег в файлах, в которых только PHP-код, не ставится. Можете погуглить почему. И спасибо что помогли ученику выше :)
По поводу задания:
Интересно, правильный ли мой вариант..
В index.php я добавил код:
В file.php я добавил:
И теперь в footer.php вставил в специальном нужном мне месте:
И всё работает. Получается из footer.php идет обращение к переменной $var, которая находится в index.php и в которую был положен file.php, а в file.php уже то что мне нужно, чтоб вывелось в footer.php в нужном месте. Но возник сразу вопрос, правильно ли это? Потому как в file.php могут быть разные переменные и разные данные и тогда в нужном мне месте выведет кучу информации, которая не актуальна для того места. Как тогда быть?
Всё правильно. А для того чтобы были только нужные переменные в нужном месте, стоит подключать файлы там, где они непосредственно нужны (в твоем примере подключать file.php внутри footer.php)
файл header. В остальных так же выводятся переменные.
А тайтл почему захардкожен?
Не совсем понял что значит захардкожен? Из двух слов?
Почему текст между тегами title явно написан. Должна использоваться переменная $nameHeader по идее
Сделал по уроку
А вот код куда вставлены переменные
Не стал делать для каждого блока сделал для одного . Думаю правильно понял задание.
Вполне норм, только конкатенацию строк нужно делать через точку, а не через запятую.
Главная страница
/header.php
/sidebar.php
/content.php
/footer.php
ОК)
Ок)
насколько я понял мы можем с помощью include в нужных местах выводить информацию которая будет хранится на отдельном файле,и до вызова include не будет видна не кому
В том числе и для этого.
По идее внутри vars.php уж тогда объявить все переменные. Подключить в основном файле vars.php, а следом шаблон.
я так и сделал,предыдущие переменные у меня в файле php только другом а var.php я подключил просто показать что я пробовал
Ок
Код config.php:
Код index.php:
Остальной код это создание таблицы и вывод переменных.
Хорошо
А тут разве в sidebar-ах не намудрено со списками? в одном элементе списка 4 списка без элементов Оо
Не обратил внимания на верстку даже. Ерунда, конечно)
По поводу
Я изучил документацию. Понял, что допустим если в file.php будет использоваться return:
То на экран выведет "Какая-то информация". А если return не будет:
То выведет просто "1", типа файл был подключен. Но для чего это нужно?
Чтобы использовать результаты вычислений в других файлах. Можно вынести какую-то логику в отдельный файл и использовать возвращаемое значение. Сейчас к такому редко прибегают, так как есть функции и методы, позволяющие выносить логику в более удобные компоненты.
https://gyazo.com/830ee33798a7ad601ea964c9ecbeb004
Отлично
вот они больные фантазии =)
Тег h1 должен быть единственным на странице.
то есть все остальные h1 должны быть p? Простите не совсем поняла :(
Нет. Они могут быть чем угодно, h2, например. Но заголовок h1 должен быть единственным - это название страницы. Их не может быть несколько.
https://pastenow.ru/be22414cf1fb677fb14d11f96f1d400c
index.php
Пример вставки переменной в файле sidebar.php
Я так понимаю дальше мы будем текст тащить из бд, загонять его в шаблон, а шаблон вызывать в index.php?
Чуточку сложнее. Но ход мыслей верный.
Ок)
Ок
header.php
sidebar.php
content.php
footer.php
index.php
style.css
Отлично. Про тег main - не уверен, что он должен содержать сайдбар.
index.php
header.php
sidebar.php
content.php
footer.php
Над позиционированием не поработала. Все таки надо было сделать таблицей как у вас...
Для чего везде эти пустые теги?
И это что такое?
Ну так удаляйте и отправляйте на проверку снова
Отлично
Баннер нужно заменить на хедер.
И это не функции никакие, а набор переменных.
Ааа... Да. Я просто назвал как удобнее было)
Нужно называть так, чтобы всем было понятно. Лучше переделайте.
Зачем использовать DIR, есть просто писать файл или папка/файл, то он и так будет смотреть в своей директории
Не в своей. Почитайте документацию. В лучшем случае он будет смотреть туда же, откуда был запущен весь код.
То есть если создать такую структуру файлов и папок:
И написать следующий код в файлах:
То всё сломается, потому что в файле www/1/1.php инклуд будет работать от папки www.
1) Выполнил
2) Выполнил
3) Если в подключаймом файле нет return, то выражение
можно использовать например для проверки наличия этого файла и выполнения какого то кода
Второй вариант, если в подключаемом файле есть return, то можно вернуть из него значение переменной, функции
Отлично
Результат: https://prnt.sc/qmyuab
Отлично
На экран вышло: Это просто заглушка1;
То есть $config получила значение 1 поскольку подключился файл успешно и вернулось TRUE, если был бы return то можно вернуть значение переменной
Отлично
Подскажите, пожалуйста, как исправить следующую ошибку :
Cannot save D:\OSPanel\domains\myproject.loc\www\functions.php.
Unable to create a backup file (functions.php~).
The file left unchanged.
Где возникает эта ошибка?
при попытке сохранить php-файл. До этого работало все окей, все сохранялось.
Что за ОС? В какой программе сохраняете?
Суть кода $var = include 'file.php' - будет обозначать подключение определенного файла и будет выводит те значение которые мы написали пусть это будет return, echo или любое значение. При подключение файла в переменную $var, мы сможем прописать эту переменную где угодно и будет выводить результаты которые мы обозначили в данном файле... (Конечно если понятно объяснил :/ - я прочитал документацию и понял суть). Спасибо огромное за данный урок! :)
Пример кода:
Отлично
Ок, закрывающий тег не нужен
index.php:
header.php:
sidebar.php:
content.php:
footer.php:
Отлично
Отлично
Добрый день!
Не забывайте оформлять код в комментариях. В остальном всё ок
index.php
header.php
sidebar.php
content.php
footer.php
Выражения $var = include 'file.php';
Если мы просто подключаем файл без переменной, то выводиться содержимое файла.
Если используем переменную, но в файле file.php нет ни return ни echo, то при вызове переменной выведется содержимое файла и единица, так как подключение было успешным.
Если в файле file.php есть return или echo, то в переменную запишется какое то значение которое можно использовать.
Всё верно?
Нет, не верно. Перечитайте документацию и напишите, в чем была ошибка в вашем ответе.
Не знаю кем и для кого была написана эта документация, но для меня она совершенно не информативна. Я больше из комментариев узнаю, которые я прочитал, сам попробовал потыкать и написал итог. Но если это не правильно, тогда такой вариант:
А что интересно делать если в файле много return(ов). Что тогда возвращается?
echo просто выведет значение, но не приведет к тому, что оно вернется при использовании require
Немного не понял, зачем создавать переменную в index с содержанием, допустим, main , потом подключать файл(допустим content.php), который её же и вызывает. Практический смысл этого будет понятен далее? Пока что в первой и второй части домашки я вижу нагромождение в файле index.
Смысл в том, чтобы вы поняли, что эти переменные можно использовать в подключенных файлах. Ровно как и то, что переменные, определенные в подключенных файлах будут доступны и в том месте, где файлы подключили.
Спасибо!
Отлично
/index.php
/header.php
/header.txt
/sidebar.php
/menu.txt
/content.php
/news1.txt
/footer.php
/footer.txt
Отлично
//index.php
//style.css
//header
//aside
//main
//footer
//test.php
Отлично
Отлично
Отлично
Привет, мой вариант.
Отлично
Отлично
Добрый день!
Макет сайта. Через переменные можно менять контент, высоту колонок, менять и добавлять пункты меню.
index.php
header.php
nav.php
article.php
footer.php
Отлично!
С файлами вопросов нет.
По этому заданию:
Изучите официальную документацию по include и изучите как можно использовать выражения вида
$var = include 'file.php';
Насколько я понял такая запись добавляет значение файла в переменную.
Если в файле была вызван return, при echo выведется то, что было возвращено функцией return.
Если не было return, то выдаст значение 1.
Правильно?
Что такое значение файла?
Где в вашем примере echo?
Дайте больше контекста, так пока непонятно)
Отлично
index.php
header.php
sidebar.php
content.php
footer.php
Отлично!
Отлично)
index.php
<?php
require_once DIR . '/config.php';
require_once DIR . '/config.php';
require_once DIR . '/config.php';
$content = file_get_contents(DIR. '/news1.txt');
require DIR. '/header.php';
require DIR. '/sidebar.php';
require DIR. '/content.php';
require DIR. '/footer.php';
Нужно оформить код в комментарии (в редакторе комментариев самая первая кнопка).
Нажмите на карандашик и поправьте ваш комментарий, пожалуйста. А потом ответьте мне на этот комментарий. После этого проверю вашу домашнюю работу и отвечу на вопросы.
данная инструкция подходит для возврата и обработки подключаемого файла, то есть
мы не просто подключаем файл и он что-то делает, мы его возвращаем как-то используем либо проверяем файл, а если не возвращаем то в переменной будет 1 (означает что файл успешно подключен, но он ничего не возвращает).
Верно
Эдентичны ли следующие методы подключения файла:
include __DIR__ . '/file.php'
иinclude './file.php'
Нет.
Во втором случае если будет следующая структура:
То ничего не заработает при обращении к index.php. Так как вот этот код:
Будет искать файл 2.php не в папке files, а рядом с файлом index.php
Спасибо, реализовал Ваш ответ наглядно (создал и запустил соответвующие директории и файлы) и сразу всё понял, спасибо :)
Пожалуйста)
Сделал может не по заданию:
index.php
header.php
footer.php
contacts.php
Ну и анологично с контентом и сайтбаром, только вот шторм почему то меня материт в файле index, типа переменные не определены, но файлы то я подключил и на сайте всё работает скрин ошибки скрин локального проекта
Всё ок, шторм не умеет понимать что переменная объявлена в другом файле. Можно ему подсказать с помощью phpdoc @var