Справка - Поиск - Участники - Войти - Регистрация
Полная версия: PHP
Частный клуб Алекса Экслера > Программирование
Old Kind MadMike
15 июля 2016, 11:19
Подскажите, пожалуйста, хороший учебник или самоучитель по PHP. Базовые представления о программировании есть (те же макросы), в принципе даже PHP-код немного подправить могу, но приходится долго разбираться каждый раз, т.к. не хватает знаний операторов и синтаксиса именно по нему.
Язык нужен для небольших локальных доработок CMS (в настоящий момент есть задачи под Joomla). Наибольшую сложность сейчас вызвают запросы в БД MySQL (например, если нужно дополнительное поле объекта вытащить, а еще и сами объекты выводятся в цикле с какими-то условиями - тут я совсем пасую).
aik
15 июля 2016, 13:26
Если именно синтаксис интересен, то лучше документацию по языку читать, а не самоучители.
https://secure.php.net/manual/ru/index.php

Old Kind MadMike написал:  Наибольшую сложность сейчас вызвают запросы в БД MySQL

А тут, скорее, надо про sql почитать.
Old Kind MadMike
15 июля 2016, 16:12

aik написал: Если именно синтаксис интересен, то лучше документацию по языку читать, а не самоучители.
https://secure.php.net/manual/ru/index.php

Интересует синтаксис, но изучать его по документации малореально. Нужна именно краткая учебная программа с логическими блоками и примерами решения типовых задач.

А тут, скорее, надо про sql почитать.

Вот как раз собирать инфу по частям из разных документов - это самый неэффективный способ обучения. Чтобы этим не заниматься, я и ищу учебное пособие.
aik
15 июля 2016, 22:40

Old Kind MadMike написал:
Вот как раз собирать инфу по частям из разных документов - это самый неэффективный способ обучения.

По себе заметил, что самый эффективный способ обучения - это как раз реализация реальных проектов.
Просто садитесь и пишете код. А за тем, какой у конкретного элемента синтаксис - заглядываете в документацию. Особенно учитывая, что сейчас написание программ состоит из использования нескольких готовых библиотек...

А абстрактный самоучитель, который расскажет вам про переменные и циклы, пользы принесёт немного. Но вообще, исторически, хорошей репутацией пользуются книги издательства O'Reilly - у нас, помнится, их издательство Питер выпускало.
Конкретных учебников не подскажу, но, к примеру, имеется "Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5" - всякие умные слова в заголовке есть. smile.gif
Martin
16 июля 2016, 00:13
Есть хорошая книга Никсон Р. Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript и CSS. 2-е изд. — СПб.: Питер, 2013. — 560 с.: ил. — (Серия «Бестселлеры O’Reilly»). ISBN 978-5-496-00187-8.
Там все буквально разжевывается даже для тех, кто вообще не программировал. Правда, JavaScript с 2013-го года ушел маленько вперед, но вроде бы тебе это не требуется?
aik
16 июля 2016, 01:56

Martin написал: Есть хорошая книга Никсон Р. Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript и CSS. 2-е изд. — СПб.: Питер, 2013. — 560 с.: ил. — (Серия «Бестселлеры O’Reilly»). ISBN 978-5-496-00187-8.
Там все буквально разжевывается даже для тех, кто вообще не программировал. Правда, JavaScript с 2013-го года ушел маленько вперед, но вроде бы тебе это не требуется?

А чем вам третье издание не угодило?
На счёт же того, что все меняется - это основная проблема учебников. Они не успевают за реальностью.
Old Kind MadMike
17 июля 2016, 02:09

Martin написал: Есть хорошая книга Никсон Р. Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript и CSS. 2-е изд. — СПб.: Питер, 2013. — 560 с.: ил. — (Серия «Бестселлеры O’Reilly»). ISBN 978-5-496-00187-8.
Там все буквально разжевывается даже для тех, кто вообще не программировал. Правда, JavaScript с 2013-го года ушел маленько вперед, но вроде бы тебе это не требуется?

Да, это похоже на то, что мне нужно. Спасибо! smile.gif
Martin
18 июля 2016, 22:48
Рад, что сумел помочь. smile.gif
Old Kind MadMike
21 июля 2016, 10:56
Кстати, посоветуйте, пожалуйста, бесплатный софт для Win10, на котором можно локально скрипты тестировать (имеется ввиду - полный образ сайта)... с выводом/подсветкой ошибок, желательно.
aik
21 июля 2016, 11:06

Old Kind MadMike написал: с выводом/подсветкой ошибок, желательно.

Ошибки выводятся в логи сервера. smile.gif

Так что для отладки надо локально поднимать сервер, а потом читать логи, если что-то работает не так, как задумано.
mrFatCat
21 июля 2016, 12:05

Old Kind MadMike написал: бесплатный софт для Win10

http://open-server.ru/download/



Old Kind MadMike написал: с выводом/подсветкой ошибок, желательно.

CODE
error_reporting  (E_ALL);
shizsa
23 июля 2016, 01:18


Фига себе, какой мощный монстр! bigeyes2.gif Спасибо за наводку. Я правильно понял, что версию PHP можно выбирать хоть каждый раз новую?
mrFatCat
23 июля 2016, 11:37
Можно "на лету" переключать версии.
Martin
26 июля 2016, 21:51
shizsa
27 июля 2016, 00:57

mrFatCat написал: Можно "на лету" переключать версии.

Отлично, вот этого во всяких хampp'ах очень не хватало.
Dead Knight
27 июля 2016, 11:23
Есть различные "игры" позволяющие научиться программировать на различных языках, если хочется, а цели какой либо, чтобы реализовать - нет.

Например https://www.codingame.com/games/puzzles (не реклама). Выбираем в списке PHP и вперед
Old Kind MadMike
16 августа 2016, 21:41
А есть какой-то способ выявить, где (в т.ч. в каком файле) задаётся объект или функция? Кроме тупого перебора всех возможных файлов с текстовым поиском...
mrFatCat
16 августа 2016, 23:33
Тоталкомандер умеет искать по подстроке в файлах папки. Так и ищу.
Inventor
16 августа 2016, 23:48
Если ещё актуально, вот весьма интересный, на мой взгляд, самоучитель.
http://www.w3schools.com/php/default.asp
Там, кстати, не только PHP есть (Javascript, SQL и другое)
Обучение построено в виде небольшого количества теории и большого количества примеров, которые на ходу можно самому редактировать для тренировки.
Old Kind MadMike
17 августа 2016, 00:59

mrFatCat написал: Тоталкомандер умеет искать по подстроке в файлах папки. Так и ищу.

Т.е. спасет только автоматизация тупого перебора?
Old Kind MadMike
17 августа 2016, 01:02

Inventor написал:  интересный, на мой взгляд, самоучитель.

Да, крутая штука... потому что со статичными примерами из книги (выше) простые вещи понимаются хорошо, а вот с объектами уже очень трудно идет frown.gif то ли какой-то базы не хватает, то ли надо уже в боевых условиях методом тыка разбираться...
Вернее - когда смотришь пример в книге, то вроде все с трудом, но понятно. А вот когда смотрю реальный код в модуле, который мне надо отредактировать - вижу фигу.
Anton
17 августа 2016, 02:35

Old Kind MadMike написал: А есть какой-то способ выявить, где (в т.ч. в каком файле) задаётся объект или функция? Кроме тупого перебора всех возможных файлов с текстовым поиском...

PhpStorm умеет проект индексировать, наши пыхеры довольны.
Да и любая нормальная IDE по идее должна уметь.
mrFatCat
17 августа 2016, 13:10

Old Kind MadMike написал: спасет только автоматизация тупого перебора?

В своем проекте - понятная и логичная архитектура.
Для поиска в чужом проекте текстовый поиск займет меньше времени, чем разбираться в чужой архитектуре.
Old Kind MadMike
17 августа 2016, 15:13

Anton написал: Да и любая нормальная IDE по идее должна уметь.

Вот я что-то подобное и спрашивал выше. Сейчас ставлю рекомендованный open server с кучей утилит в комплекте - попробую начать с него.
Anton
18 августа 2016, 00:23

Old Kind MadMike написал:
Вот я что-то подобное и спрашивал выше. Сейчас ставлю рекомендованный open server с кучей утилит в комплекте - попробую начать с него.

Брр. Сервер - это сервер, место, где программа работает, а IDE - это IDE, место, где человек программу пишет. IDE может уметь взаимодействовать с сервером со всякими отладчиками и профайлерами, но вообще вещи слабо связанные.
Old Kind MadMike
19 августа 2016, 14:38

Anton написал: Сервер - это сервер, место, где программа работает, а IDE - это IDE, место, где человек программу пишет.

Это понятно. Просто там в комплекте много утилит шло, думал там IDE тоже будет. Но нет. Отдельно нашел и поставил Aptana Studio - где-то она находит определение переменной/объекта в другом файле, а где-то нет frown.gif пока не понял систему...

Вот беру файл, где в первых строках идет
CODE
$item = $this->item

А откуда он берет $this, что это за объект? Как найти?
Мне бы это здорово упростило работу с кодом, потому что автор модуля умудрился несколько разных представлений одних и тех же элементов построить через разные объекты со своими методами. В итоге, в одном файле метод типа
CODE
$this->crtated_by
работает, а в другом - нет. Не обращаться же с каждым элементом в базу чтобы доп.признак элемента вытащить?

PS сейчас буду пробовать phpDesigner 8
elenaki
19 августа 2016, 21:55
www.softtime.ru/forum и книги там же и справочник функций. Мой любимый форум. Добрый.
mrFatCat
20 августа 2016, 00:10

Old Kind MadMike написал:
CODE
$item = $this->item
А откуда он берет $this, что это за объект? Как найти?

CODE
<?php
class demo{
    var $item = "content";
    function demo(){
        die($this->item);
    }
}
?>
Old Kind MadMike
23 августа 2016, 02:34

mrFatCat написал:

Спасибо. Пока не проверял - с другими вопросами закопался...

Туплю, не могу понять природу ошибки...
код в PHP
CODE
<div class="tl-popup-wrapper">
 <input type="checkbox" class="tl-popup-checkbox" id="popupCheckbox<?php echo $item->id; ?>">
 <div class="tl-popup">
   <div class="tl-popup-content">
       <label for="popupCheckbox<?php echo $event->id; ?>" class="tl-popup-closer">×</label>
 Popup text
   </div>
 </div>
</div>
<label for="popupCheckbox<?php echo $item->id; ?>" class="tl-popup-shower"><?php echo JText::_('EB_REGISTER');; ?></label>

При исполнении почему-то получается вот такой HTML:
CODE
<div class="tl-popup-wrapper">
 <input type="checkbox" class="tl-popup-checkbox" id="popupCheckbox35"><label for=""></label>
 <div class="tl-popup">
   <div class="tl-popup-content">
      <label for="popupCheckbox35" class="tl-popup-closer">×</label>
Popup text
   </div>
 </div>
</div>

Откуда может возникать label после input? Из-за него не работает потом стиль
CODE
.tl-popup-checkbox:checked + .tl-popup
mrFatCat
23 августа 2016, 11:04

Old Kind MadMike написал: Пока не проверял

Я не к тому, чтобы проверять, а для понимания:
var $item = ... // создает переменную внутри класса.
$this->item // использование переменной в функции внутри этого класса.
Old Kind MadMike
23 августа 2016, 12:14

mrFatCat написал:

Это в целом понятно. Мне нужно вывести больше данных, чем в коробочной версии скрипта. Просто чтобы использовать функции $this надо понимать, что это за класс и какие в нем функции есть (дописать в него нужную функцию, если нужно). В принципе, я уже нашёл функцию get_class($this), которая возвращает имя класса, так уже проще - буду разбираться дальше (сейчас пока в верстке закопался, но скоро закончу).
Как я понял, $this->item наоборот, возвращает значение переменной/функции, описанной в классе.
А вот когда берется переменная или массив $item (get_class возвращает отсутствие класса), то что значит, например команда $item->id ? Вернее, где/как определяется, что такое id применительно к $item?
Dead Knight
23 августа 2016, 12:22

Old Kind MadMike написал:
А вот когда берется переменная или массив $item, то что значит, например команда $item->id ?

$item - Объект некоторого класса.
$item->id - поле объекта
$item->f() - вызвать метод объекта
Dead Knight
23 августа 2016, 12:25

Old Kind MadMike написал:
Просто чтобы использовать функции $this надо понимать, что это за класс и какие в нем функции есть (дописать в него нужную функцию, если нужно).

Разбираться, что за класс стоит за $this особо не надо. $this всегда означает тот класс, с методе которого он используется.

Смотри, что написал mrFatCat

CODE
<?php
class Demo{
    var $item = "content";
    function demo(){
        echo ($this->item);  
    }
}


$obj = new Demo();

$obj->$item = "no-content\r\n";

echo ($obj->item);  // вывести значение поля $item oбъекта
$obj->demo();       // произойдет то же самое,  
                    // будет выведено значение поля $item объекта $obj
?>


Т.е. в итого будет напечатано
CODE

no-content
no-content
Old Kind MadMike
23 августа 2016, 14:03

Dead Knight написал: Разбираться, что за класс стоит за $this особо не надо. $this всегда означает тот класс, с методе которого он используется.

В моем случае многофайловый модуль, и конкретный файл не содержит определения класса, сразу начинается с использования $this. Очевидной связи с другим файлом (продолжением которого он является) нет - в смысле, логически я его не могу вычислить.
Old Kind MadMike
23 августа 2016, 14:10

Dead Knight написал:
$item - Объект некоторого класса.
$item->id - поле объекта
$item->f() - вызвать метод объекта

Если перед этим есть $item = new Demo (), то это объект, это мне понятно.
А если $item изначально вводится как переменная или массив, то что значит команда типа $item->id? Доберусь до компа дам конкретный пример.
mrFatCat
23 августа 2016, 14:19

Dead Knight написал: в итого будет напечатано CODE

no-content
no-content

Лень проверять, но думаю, будет напечатано:
CODE
contentno-content
no-content


Первой отработает строка:
CODE
$obj = new Demo();
Так как имя функции совпадает с именем класса, функция будет выполнена, и напечатает:
CODE
content
Последующие строки изменят значение переменной и выведут дважды измененное значение.
Dead Knight
23 августа 2016, 14:54

mrFatCat написал:
Лень проверять, но думаю, будет напечатано:
CODE
contentno-content
no-content


Первой отработает строка:
CODE
$obj = new Demo();


Да, я совсем забыл, что php - case insensitive. Давно уже на нем не писал.
mrFatCat
23 августа 2016, 15:51

Dead Knight написал: совсем забыл, что php - case insensitive

Я тоже недавно забыл, и пару дней не мог найти ошибку двойного срабатывания функции.
Имя класса было SESSION, имя функции session. 3d.gif
Old Kind MadMike
23 августа 2016, 20:08

Dead Knight написал:
$item - Объект некоторого класса.
$item->id - поле объекта
$item->f() - вызвать метод объекта

Вот фрагмент реального кода
CODE
class ClassName1 extends ClassName2
public function display()
{
 $model  = $this->getModel();
 $items  = $model->getData();

Насколько я понимаю, $model тут вводится именно как переменная или массив, тогда $model->getData() это что за команда?
Dead Knight
23 августа 2016, 21:22

Old Kind MadMike написал:
Вот фрагмент реального кода

Ну так... ClassName1 это дочерний класс от ClassName2. Соответственно где-то определен класс ClassName2.

Соответственно
     
CODE

 $model  = $this->getModel();

объявляем поле $model класса ClassName1 и инициализируем его по умолчанию тем, что нам вернул метод getModel(). Метод getModel() определен в этом классе, либо, что более вероятно в данном случае, он определен в одном из предков (например в ClassName2).
     
CODE

 $items  = $model->getData();

объявляем поле $items класса ClassName1 и инициализируем его по умолчанию тем, что нам вернул метод $model->getData(). При этом $model это объект типа некоторого класса, у которого этот метод должен быть определен.
Dead Knight
23 августа 2016, 21:27
И да, тебе стоит разделять переменные от полей/членов класса.

В твоем примере $items и $model - это не переменные. Это поля класса или можешь называть переменная-член класса, или атрибут.
Эта версия форума - с пониженной функциональностью. Для просмотра полной версии со всеми функциями, форматированием, картинками и т. п. нажмите сюда.
Invision Power Board © 2001-2017 Invision Power Services, Inc.
модификация - Яро & Серёга
Хостинг от «Зенон»Сервера компании «ETegro»