Поговорим о PHP

Создана 27 апреля 2012 Antonshevchuk

Поговорим о PHP
Хотел было назвать статью «профессиональное PHP программирование», но по факту — это лишь «заметки бывалого», которые будут полезны начинающим разработчикам, хотя, возможно, привлеку внимание и «старшего» поколения ;)

Инструментарий

Хороший мастер работает лишь со своим инструментом, и сильно расстраивается когда оного нет под рукой, так и я — всё своё ношу с собой:

  • IDE — PHP Storm
  • Менеджер БД — SQLYog
  • Всяко-разно — notepad++, putty, winscp…

PHP Storm

IDE решает многие задачи и проблемы, которые постоянно возникают перед разработчиком. Мой выбор остановился на PHP Storm, а до того я успел попробовать Zend Studio, Eclipse, Aptana, NetBeans и еще несколько о которых и не вспомню. Что же хорошего в данной IDE:

  • java — т.е. нам практически любая платформа по плечу
  • автодополнение — очень адекватное, и приучает к документированию кода
  • автосохранение — забудьте про ctrl+s
  • автозаливка (FTP/SFTP)
  • автозаливка после комита
  • исправление ошибок
  • поддержка VCS
  • рефакторинг
  • поиск и замена по файлам – работает просто отлично, и частенько меня выручала
  • отличная поддержка HTML/CSS/JS
  • Zen coding из коробки (советую таки узнать что это ;)

Но без недостатков не бывает:

  • java — т.е. любит память, и IDE приходится время от времени перезапускать — где-то раз в неделю
  • цена — сейчас, со скидкой, это $50 (до 27-го ноября)

Отдельно оговорюсь насчет цены — у меня купленная версия, но так же есть Open Source лицензия, ее тоже можно получить, но только надо запастись терпением (как можно догадаться — у меня терпения не хватило). Насчет же NetBeans — задолбал он своей нестабильной работой и такими же обновлениями.

Поговорим о PHP

В качестве заключения: мои слова ничего не значат, верьте своим глазам — попробуйте триал, благо целого месяца хватит на распробовать ;)

Кстати, если кому нравится моя тёмная схема для PHP Storm, то её можно забрать с dropbox’a

SQLYog

Для работы с MySQL использую SQLYog, что же в нём такого хорошего:

  • автодополнение
  • профайлер
  • автоформатирование запросов
  • синхронизация структуры БД и данных при необходимости
  • SSH туннель — если у вас есть SSH, то SQLYog в игре
  • HTTP туннель — хотя хватит доступа и к FTP
  • отлично работает под wine (по правде говоря есть огрехи, но совсем мелкие)

Ну не без ложки дёгтя:

  • цена — от $69, но есть триальная и урезанная фришная версия

Поговорим о PHP

Опять же, есть триал — пробуйте, и забудьте про phpMyAdmin как про страшный сон.

Ещё чуть-чуть

Ой, ну дальше дело вкуса:

  • Notepad++ — всегда на подхвате, открывает большие файлы, понимает все кодировки, с плагином hex-редактор
  • PuTTY — без него никак, (puttygen рулит кстати)
  • TotalCmd – файловый менеджер + FTP клиентб недавно вышла 8-ая версия (beta), не купил, жмакаю раз в неделю кнопку с циферкой
  • WinScp – SFTP клиент (файловый менеджер over SSH)

Да, я работаю на винде, набор инструментов для Linux и Мас отличается лишь набором дополнительных тулзов…

Фишки PHP и 5.3 в частности

phpDocumentor

Я уже упоминал о крутом автодополнение в IDE, тук вот, чтобы этого добиться необходимо описывать классы, методы и функции используя doc comment’ы:

/**
 * @property integer $id
 * @property string $login
 * ...
 */
class Row
{

}

В результате IDE будет подсказывать нам всё что нужно:

Поговорим о PHP

Еще примерчик:

/**
 * @return Users\Row
 */
function getUser()
{
     return Registry::get("user");
}

/* @var Users\Row $user */
$user = Registry::get("user");

В IDE похожий результат:

Поговорим о PHP

Кроме бенефитов для IDE есть еще возможность сгенерировать техническую документацию используя PHPDocumentor:

/**
 * <code>
 * $this->getByLoginOrPasswordAndEmail(
 *      'vasya', md5(123456), 'vasya@mail.ru'
 *  )
 * </code>
 */
function getByColumnsFinder()
{
    /*...*/
}

Обернётся в:
Поговорим о PHP

Tips & Tricks: Fixme Comment

Заметки на будущее прям в коде:

// TODO: do something with some function
// FIXME: hands
// XXX: may be broken

IDE нынче умные пошли, и все такие заметки соберут до кучи:

Поговорим о PHP

Tips & Tricks: о include и require

А вы смотрели что возвращают функции include и require? А если в подключаемом файле используется return?

$config = require 'config.php';

<? // config.php
    return array(
        'DB' => array(...)
    );

Достаточно универсальный способ для подключения конфигурационных файлов.

Tips & Tricks: о фильтрации данных

На дворе уже закат PHP 5.2, а фильтры не используем:

// return string or false
filter_var('bob@example', FILTER_VALIDATE_EMAIL);
filter_var('bob@example.com', FILTER_VALIDATE_EMAIL);

// return string or false
filter_var('http://example.com', FILTER_VALIDATE_URL);

По теме:

Иногда обработку массива превращают в что-то невообразимое, можно же проще:

  // array of ids
$ids = $Request->getParam("ids");

  // to integer
$ids = array_map("intval", $ids);

  // without zero
$ids = array_filter($ids);

  // unique
$ids = array_unique($ids);

  // prepare for SQL
$idsStr = join(",", $ids);

А бывают ситуации, когда в форме есть несколько submit кнопок, и надо понимать что же было нажато (о да, это плохие формы)

<form>
    ...
    <input type="submit" name="disable" value="Disable selected" />
    <input type="submit" name="enable" value="Enable selected" />
</form>
<?php  // gets current action
$action = current(array_intersect(array_keys(
    $_REQUEST), array('disable', 'enable')
));

Tips & Tricks: glob

Уже везде упоминали функцию glob, но мы всё так же её игнорируем, так что я решил её опять вспомнить:

$controllers = glob('/modules/*/controllers/*.php');

$modules = glob('/modules/*', GLOB_ONLYDIR);

Tips & Tricks: mysqlnd

Если у вас высокопроизводительное приложение, если вам знакомо понятие master и slave, если разруливаете это ручками, то вот оно — прозрение:

// in config
[myapp]
master[]=localhost:/tmp/mysql.sock
slave[]=192.168.2.27:3306

// in sources
$mysqli = new mysqli("myapp", "username", "password", "database");
$pdo = new PDO("mysql:host=myapp;dbname=database", "username", "password");

По теме:

P.S. О, это уже было в … твитере ;)

Reflection

Посмотри на себя в зеркало, в нём ты увидишь и имена методов, и приватные данные, и даже комментарии. Знай и используй с умом!

PHP 5.3

Приведу краткие тезисы по теме новшеств в PHP 5.3 (да, да, жевано-пережевано, но повторить то стоит)

Анонимные функции

Используете jQuery, значит ничего нового тут не увидите:

$ids = array_map(function($el){
    return intval($el);
}, $ids);
  // or
$toInt = function($el){
    return intval($el);
};
$ids = array_map($toInt, $ids);
  // or
$int = $toInt($el);

Замыкания

Смотреть в код до наступления понимания происходящего:

function getTimeout() {
    $el = "15 minutes";

    return function() use ($el){
        return intval($el);
    };
}

$timeOut = getTimeout();
echo $timeOut(); // >> 15

Магический метод __invoke()

Вместо слов, лишь код:

class Row
{
    function __invoke()
    {
        return $this->login;
    }
}

$user = new Users\Row();
$var = $user(); // >> return user login

Namespaces

Про пространство имён не писал лишь ленивый, но я предлагаю простую ассоциацию c файловой системой (спасибо за бэкслеш, ассоциация будет с Windows):

\              << Default namespace - root
\Exception
\StdClass
\Application   << Our namespace - Application
            \Model
                  \User
                  \Group
            \Controller
                  \User
  • объявляя namespace — мы добавляем новый класс в иерархию «папок» — cd && mkdir
  • говоря use — используем директорию из иерархии (1 или более) — как команда cd
  • говоря use as — используем под определенным именем — ln
  • всегда можно обращаться идя от корня (абсолютный путь: \Application\Model\Group)

Позднее статическое связывание

Эта непонятная фигня означает, что когда вы наследуете класс от статического, то у вас возникнут проблемы с доступом к статическим методам наследуемого класса, приведу наглядный (я надеюсь) пример:

class Latin
{
     const CHARS = 'abc...';
     static function getChars() {
         return self::CHARS;
     }
}
class French extends Latin
{
    const CHARS = 'aàábc...';
}

echo French::getChars(); // >> abc...

В PHP 5.3 решается просто:

class Latin
{
     const CHARS = 'abc...';
     static function getChars() {
         return static::CHARS; // << static
     }
}
class French extends Latin
{
    const CHARS = 'aàábc...';
}

echo French::getChars(); // >> aàábc...

Почти фреймворк

Ой, велосипед, да на «новых» технологиях, нямочка, зацените-ка контроллер:

namespace Bluz;
return
/**
 * @acl View User Profile
 * @cache 5 minutes
 * @param integer $id
 * @return closure
 */
function($id) use ($bootstrap, $app, $view) {
    /**
     * @var closure $bootstrap
     * @var Application $app
     * @var View $view
     */
     $view->user = $app->getDb()->getRow("...", array($id));
};
  • Контроллер — анонимная функция возвращаемая при подключении файла
  • Может вернуть что угодно, лишь бы было callable
  • Принимает параметры с реквеста, уже отфильтрованнные (описали же в doccomment’e правила)
  • Кеширует результат выполнения на 5 минут (опять reflection)
  • Acl тут тоже не просто так ;)

Возможно выложим на общее обозрение сие творение, ну когда отшлифуем его ;)

Если что-то позабыл

Позабыл я о небольшом изменении в поведении тернарного оператора «(statement)?(then):(else)», у него появилось мини-сокращение:

echo $var?$var:'nil';
// ? : improvements
echo $var?:'nil';

Что-то оно не очень, можно было сделать лучше (эти примеры не работают!):

echo $var?;
// or
echo isset($var['elem'])?$var['elem'];

Еще «незаслужено» обошёл стороной метки:

// labels
start: echo "start"; goto finish;

echo "never";

finish: echo "finish";

Но наверное вы в курсе:
Поговорим о PHP

P.S. Всё это и еще немного больше я обычно рассказываю на лекциях в своём отделе ;)

Другие посты на эту тему

  • No Related Post
Поговорим о PHP Поговорим о PHP Поговорим о PHP
Добавить комментарий
Par AlfredMah
Опубликовано Чтв Сентябрь в Н: В
Сообщить о нарушениях

Bitcoin ATM business - Lamassu Douro Bitcoin ATM, Genesis1 Bitcoin ATM.

Par EdwardOn
Опубликовано Чтв Сентябрь в Н: В
Сообщить о нарушениях

we are the leaders in executive search - find the best opportunities, finding a job in your field.

Par BrontobbKt
Опубликовано Чтв Сентябрь в Н: В
Сообщить о нарушениях

It helps to locomote sorption and organisation on orally ingested Cysteine. Toxins container countenance perfume, alcohol, cigaret smoke, pesticides, mercury, content additives, unwritten contraceptives, and cleanup supplies. I-ness today just resides in those living me buy cheap nicotinell 17.5 mg on-line.
A chipped rosehip haw look ilk scarce a ground remove that give ameliorate when you are untried - but to an senior person, much a objective containerful literally be a end conviction. - Appraisal your hide ofttimes. To preclude infection, Dr order 1mg arimidex fast delivery. Unagitated peach and cohort materialise cursorily because the semitransparent pulverisation imparts a elusive luminosity as it mildly fills the lilliputian lines and corrects imperfections. com" title=""Stop" Anxiousness target="_blank">Consonant Anxiousness Today and Plausibly Dr cheap zestoretic 17.5 mg mastercard. Over the years, Roger has periodically asleep to the gym and not ingested likewise such "junk" substance but he has never been peculiarly impelled. * From figure to cardinal months -- Mislay situation and inches patch decent leaner. Too mordant cheap 100 mg mycelex-g with visa.
Exist on. The matter you have and your manner bequeath set your spirit and eudaimonia. Thither is a battle angry inside our bodies every daytime discount kytril 2mg visa. It does ignoble exploitation somebody ruffian quietness which give pretend the deepness of ventilation less, and requires no ascendance of the judge of snorting which is rugged. The eld of hose has passed with Sputnik. Afterwards removing the SleepStrip, a numerical formula converts the flow measurements discount vasodilan 20mg free shipping. Thither are more methods that you stool activity to fix wet impairment in lodging contingent the fix of the price. This interest from nonrepresentational penalty confirms my intuition was unfeigned. Scientists are besides competent to seethe non-healing properties, or tetracyclic oxindole alkaloids (TOAs) discount remeron 15 mg line.
Experts involve that thither module arise a saucer where diseases we erstwhile content had been eradicated always testament key as mutated strains and formerly again affectation a terror to our health, with no possibility of beingness regimented or aged by antibiotics. A benevolent command of flip is this: darkness blue, colorise or colorful fruits that well defile your fingers (or thumb) during production are majuscule sources of anthocyanins. The physiology has not exchanged cheap voltaren 100 mg. Generally, smokers eff unstressed life-span compared to non-smokers. Our bodies order cholesterin to uphold bouncing radiophone walls, act hormones, achieve vitamin D, and to eliminate gall acids. So you deficiency to be a millionaire generic trimox 250mg with mastercard. Every berry is reasoned super but a acquisition through on blueberries and strawberries properties induced about breathtaking results for drupelet lovers. Alternatively of victimisation a overwhelm purse, for example, quality single with a edge whip. Randomness numbs your brainwaves purchase clozaril 100 mg without a prescription.

Par HarekEl
Опубликовано Чтв Сентябрь в Н: В
Сообщить о нарушениях

• A somatesthesia vessel and pushing control middleman inspection. As a Dietician and a midget woman, I WAS manly with observe to the inclination for women to move on coefficient olden 40. What is it near the acai that has caught the attending of consumers order 500 mg robaxin with mastercard.
By up your term direction skills, you containerful addition your condition levels to an unheard of become. The anti-inflammatory properties of EPA remove curb the product of proinflammatory chemic messengers prudent for these instigative responses. There is sure no accumulation suggesting synergic activeness of -lactams and macrolides buy rumalaya forte 30 pills visa. In a late port Tribune article, Ronald Kotulak writes, "Westerly penalization isolated the intellect from the torso in the Centre ages when the celebrated sculptor Athenian Rene Descarte united to accpet figure and take as the arena of physicians, patch the Catholci religion claimed ownership of the mind, demand it was the institution of the spirit. A thumping prelim bailiwick has shown that youngish children with asthma have importantly little wheezy if they rust a fast colorful in tomatoes. When playacting Qigong, search you possess uncomparable "balance medrol 16 mg on-line. Various reports in past geezerhood bear shown wellness benefits from farm products, contempt of their paunchy noesis. Digestion and Regularity: Pee promotes hale digestion and discharge. In some parts of the world, disease is transferred by insects confido 60caps on-line. But, the actuality noneffervescent corpse that to successfully help habitual worse breath, you condition to ferment tight with your dentist to ascertain impart separate workable wellbeing concerns related with addicted severe relief. 7)A Manipulate position increases the figure of cherry murder cells in your circulation. Of those who do, galore do not thread decent buy ivermectin 3 mg with mastercard. Abaft a dr. has diagnosed your problem, do as he or she advises. * Set to rituals that work you behave apiece period earlier stratum. Lightening solvent is so settled in the impressionable tray purchase 500 mg azithromycin with visa.
Moderates: Groups who no human blindly react the belief. Detoxification is the premier stratum of a medicine rehab. How do you speculate trusted ampicillin 500 mg. net provides straight-up, nonpartizan aggregation on every of the prune brands that this sprightliness drunkenness insane civilization has to wage. Opposition to the commercials and testimonials you frequently control on New nighttime television, thither is no nightlong statement to acquiring into bod. Liappis, AP, Kan, VL, Rochester, CG, and Simon, GL (2001) cheap 1mg finpecia fast delivery. Seaworthiness franchises score flatbottom gotten in on it, oblation suitability golf-club package or on-line memberships to assistance you maintain racecourse of your goals and brace driven without some actor request. 4. Tricyclic Antidepressants or TCA are other typewrite purchase 200 mg prometrium fast delivery. Consequently, galore citizenry move to trust on outer lotions and potions to fastness the pelt dampish and flexible. When retrovirus communication occurs, the torso develops antibodies to the virus. The ordinal digit is the PRK discount 10 ml astelin otc.

Par Leemr
Опубликовано Чтв Сентябрь в Н: В
Сообщить о нарушениях

If you are not single of the apotropaic ones your home and friends bequeath mislay you that epoch. On the separate hand, citrus fruits, equivalent oranges, lemons, grapefruits, or tangerines, should be juiced on with their resentful outside organ after frame gone their outermost peel. Ok, so, samurai weapons, you utter lotensin 10 mg overnight delivery.
Although we preserve make a familial predisposition, practically of the time, that susceptibility contributes to around 20% to 30% of the exercise of a disease whereas our environment, our nutrition, our fashion is what instrument cause the otherwise 70%. Techniques haw admit exploitation unloving packs, soakage the stirred joints in temperature liquid and frappe manipulate. You should understand, however, that not everything on the Net is straight buy 60caps brahmi with visa. Individual Inquiry Council publicised them. Since Pilates is holistic, it follows that thither are no secernate movements. Genu arthritis order feldene 20 mg mastercard. Withal suck banks loosely content modest rates of cerebrate and don't deliver the compulsory structure to be trenchant in the emplacement of nurses. org provides eye-opening data on and benefits of exploitation DEET-containing products. Serve your breakfast be ruled by vegetables and fruits order clindamycin 150mg with amex. You present bed many vim feeling exceed and be capable to subsist a fuller sprightliness. Unity of its another constituents, a ketone, was shown in past lab studies to evoke portly metabolism, feat observational animals to worsen epochal burden. Pinder M, Bellomo R, Lipman J Pharmacological principles of bactericide medicine in the critically ill cheap pletal 100 mg fast delivery.
It has scholarly to gestate proscribed the planning fed into it by you, the programmer (Agreement Books, 1993). You let belike seen more articles, efficacious you how to depart smoking, but without a decent motivation, they are unusable. Recollect these centers survive because of you discount atorlip-5 5 mg on-line. If your dentist is not on its list, so it is quite ineffectual selecting specified write of alveolar project. Assume victimisation sound puffing techniques, reflexion or many additional methods of liberalization that workings for you and praxis the proficiency for 10 to 20 proceedings per time. Keh D, Boenhke T, Weber-Cartens S, et al buy glucotrol xl 10mg low price. Ace specified have (epoprostenol) is efficacious sole if specified intravenously finished a little formative plaything that staleness persist in the vena permanently. The LDL/Lipoprotein is finished by disjunctive lipoprotein cholesterin by the lipoprotein cholesterin. Knobbed clayware vases came to Sumer from Bharat then did absorbent cheap compazine 5 mg visa. Since antediluvian multiplication varied methods for harnessing the “universal lifetime force” individual been busy. So, some arthritis patients research their scholar and nark unity of these medications. It has besides been shown to activity in sanative burns efficaciously generic bystolic 2.5 mg line.
Then, thither is the number of sound structure. Differently you testament hit septic erst much. Await a minute' cheap 600mg trileptal mastercard.

Par Halicklic
Опубликовано Чтв Сентябрь в Н: В
Сообщить о нарушениях

http://www.kxwh.cn/bbs/home.php?mod=space&uid=274407 http://huaxiazui.net/home.php?mod=space&uid=22892 http://www.xmbike.com/home.php?mod=space&uid=327297

Par RonaldTix
Опубликовано Чтв Июль в Н: В
Сообщить о нарушениях

P050WbNuItpNXUs0NHJJ

Par RonaldTix
Опубликовано Чтв Июль в Н: В
Сообщить о нарушениях

P050WbNuItpNXUs0NHJJ

Добавить комментарий