Categorieën
PHP WordPress

PHP namespaces `use` of `\` prefix?

Het lijkt er op dat er steeds meer PHP-ontwikkelaars binnen namespaces gebruik gaan maken van zogenaamde ‘fully qualified name’ definities. Aan het gebruik van bijvoorbeeld globale PHP-functies zonder use function of \-prefix kleven namelijk een aantal nadelen. In het artikel “Optimizing PHP performance by using fully-qualified function calls” van Toon Verwerft is hier meer over te lezen. En ook op de website van DEV Community staat meer informatie:

Normally your code is namespaced (right?). So what happens when you call a function from the standard PHP library? The “compiler” (opcode producer) will look into the current namespace, then go up, and eventually use the global namespace. This means that if you add a “\” in front of standard functions (so effectively namespacing it in the global namespace explicitely), it will result in less opcode instructions, and that means faster code execution. Think it’s one of those useless micro-optimization like the use of single vs. double quotes? Think again.

DEV Community – https://dev.to/elabftw/optimizing-your-php-app-speed-3hd4

Ook op de website van PHP zelf is meer informatie te vinden over hoe PHP-namespaces werken qua naamgeving van classes, functies, constanten, etc. In de FAQ staan een groot aantal voorbeelden van hoe PHP omgaat met de naamgeving binnen namespaces.

Inmiddels zijn er ook enkele tools beschikbaar die kunnen helpen bij het gebruik van ‘fully qualified name’ definities. Zo kun je bijvoorbeeld met “PHP Coding Standards Fixer” het volgende doen:

➜  ~ php-cs-fixer fix test.php --rules=native_function_invocation,native_constant_invocation

Bron: https://stackoverflow.com/questions/55419673/php7-adding-a-slash-to-all-standard-php-functions-php-cs-fixer-rule

Naast php-cs-fixer kwam ik ook de volgende tools geven:

Waar ik echter geen goed antwoord op kon vinden was of je nou beter kunt prefixen met een \ of use statements kunt gebruiken. In de TYPO3 decision topic “Should we use fully qualified function (FQN) calls like \is_array in the core?” kwam ik uiteindelijk de volgende vraag tegen:

do I read you correctly that you prefer having slashes over “use…” imports?

why?

Tymoteusz Motylewski

Deze vraag werd als volgt beantwoord:

Because we use the same PHP function within a file mostly not more than one or two times. Hence, it’s a waste of space up there to have 10 lines for 10 different functions.

(and I do not consider PHP core functions as “dependencies” like other classes, which should be easily readable at the top of a file)

Markus Klein

Op basis van deze argumenten en de momenteel beschikbare tools lijkt het prefixen met \ de voorkeur te hebben. Het was me ook zelf opgevallen dat je al snel veel use function definities kunt krijgen:

use function apply_filters;
use function implode;
use function is_object;
use function json_decode;
use function sprintf;
use function wp_json_encode;
use function wp_remote_request;
use function wp_remote_retrieve_body;
use function wp_remote_retrieve_response_code;
use function wp_remote_retrieve_response_message;

Het toevoegen van een prefix \ is in veel gevallen korter.

Bekijk ook eens de presentatie “For the love of code: Modernizing WordPress, plugins, and themes” van Juliette Reinders Folmer. Ze geeft in de presentatie aan op welke manier je PHP-code nog verder kunt moderniseren. Ze geeft ook nog een aantal goede ‘best practices’:

  • Focus on function, not syntax
  • Don’t attempt to do everything at once

Categorieën
PHP WooCommerce WordPress

WordPress en PHP Exception

Binnen WordPress core wordt nog niet heel veel gebruik gemaakt van PHP Exceptions. In plaats daarvan wordt er veel gebruik gemaakt van de WP_Error class. Binnen de populaire webwinkel plugin WooCommerce is de overstap naar PHP Exceptions echter al wel gemaakt. Afgelopen maanden zijn we ook binnen de Pronamic Pay plugin de overstap naar PHP Exceptions aan het maken. In het artikel “Modern WordPress Development: You should throw an exception when you encounter a WP_Error” zijn enkele argumenten te vinden voor PHP Exceptions. Ook vond ik de Stack Overflow vraag “Best practices: Use of @throws in php-doc, and how it could be handle” en antwoorden interessant om te lezen. Ik denk dat het voor veel WordPress ontwikkelaars interessant is om (meer) gebruik te maken van PHP Exceptions.

Categorieën
Geen categorie

ASCII kunst met FIGlet en TOIlet

Voor de nerds 🤓, ASCII kunst met FIGlet en TOIlet:

FIGlet

figlet Pronamic

Er zijn veel FIGlet fonts beschikbaar, deze kun je bekijken via het showfigfonts commando. En op http://www.figlet.org/fontdb.cgi is ook een lijst te vinden van fonts.

figlet -f shadow Pronamic

TOIlet

TOIlet werkt vergelijkbaar met FIGlet maar heeft coole kleuren filters 🦄🌈.

toilet Pronamic --filter gay

TOIlet kan ook overweg met FIGlet fonts:

toilet -d $(figlet -I 2) -f standard Pronamic --filter metal

Het subcommando figlet -I 2 geeft de standaard FIGlet font map terug zodat TOIlet weet waar de FIGlet fonts te vinden zijn.

Bronnen

Categorieën
Geen categorie

PHPUnit geen kleuren output in Composer script

Bij Pronamic maken we binnen WordPress projecten veel gebruik van Composer, PHPUnit en andere tools. Om het aanroepen van scripts te vereenvoudigen maken we ook wel gebruik van Composer scripts. In plaats van bijvoorbeeld vendor/bin/phpunit te typen kunnen we dan composer phpunit gebruiken.

{
	"name": "…",
	"description": "…",
	"config": {
		"sort-packages": true
	},
	"require": {
		"php": ">=5.6.0"
	},
	"require-dev": {
		"phpunit/phpunit": "^5.7"
	},
	"scripts": {
		"phpunit": "vendor/bin/phpunit"
	}
}

Nadeel daarvan was echter dat composer phpunit geen kleuren output gaf. Terwijl het aanroepen van vendor/bin/phpunit wel een kleuren output gaf. Dit terwijl in het PHPUnit configuratie bestand phpunit.xml.dist wel colors="true" stond. Na een kleine zoektocht kwam ik de oorzaak en oplossing tegen op Stack Overflow:

I added --colors=always from PHPUnit master (4.6) branch which did the trick. It seems PHPUnit actually detects it is called through another scripts and suppresses the colors itself.

Haralan Dobrev – https://stackoverflow.com/questions/27024298/keep-color-output-when-running-scripts-on-composer#comment44218731_27024464
{
	"name": "…",
	"description": "…",
	"config": {
		"sort-packages": true
	},
	"require": {
		"php": ">=5.6.0"
	},
	"require-dev": {
		"phpunit/phpunit": "^5.7"
	},
	"scripts": {
		"phpunit": "vendor/bin/phpunit --colors=always"
	}
}

Hoe we dit bij Pronamic in gebruik hebben is bijvoorbeeld te zien in de WordPress pay core bibliotheek:

https://github.com/wp-pay/core

Categorieën
Geen categorie

Disney emoji quiz

  1. 🔎🐠
    Finding Nemo (Op zoek naar Nemo)
  2. 🏴‍☠️⚓️🏝
    Pirates of the Caribbean
  3. 🐝🐛🐌🐞🐜
    A Bug’s Life
  4. 🦁🐗🐘🌅👑
    The Lion King (De Leeuwenkoning)
  5. 👹🕯🕑🌹✨👩🏻‍🦰
    Beauty and the Beast (Belle en het Beest)
  6. 🐶🍝🐶🎹🎁
    Lady en de Vagebond (Lady and the Tramp)
  7. 👾🎮🔨👊🍭🏅
    Wreck-It Ralph
  8. 🐠🐚🐟🔱🐙🌊🧜‍♀️
    The Little Mermaid (De kleine zeemeermin)
  9. 🐭🎪👂🐘
    Dumbo (Dombo)
  10. 👦🏼👴🏻🏠🎈⬆️
    Up
  11. ☃️👸😨
    Frozen
  12. 🐍🐻🧒📖
    The Jungle Book (Jungle Boek)
  13. 📖🤠👢🌵🚀👨‍🚀🍕
    Toy Story
  14. 💯1️⃣🐶
    101 Dalmatians (101 Dalmatiërs)
  15. 🧞👳‍♂️🕌👩🏻❤️
    Aladdin
  16. ❄️🍎💎7️⃣
    Snow White and the Seven Dwarfs (Sneeuwwitje en de zeven dwergen)
  17. 🚕⚡️🚗🚙💨🏁⛽
    Cars
  18. 👵🏻💇🏼‍♀️🐴🤴🏻🏰
    Tangled (Rapunzel)
  19. 👠👗🎀🤴🏻🎃✨
    Cinderella (Assepoester)
  20. 👸💋🐸🎶✨
    The Princess and the Frog (De prinses en de kikker)
  21. 🦌❄️⛸🐰
    Bambi
  22. 🤥🦗👴🏻
    Pinocchio (Pinokkio)
  23. 👦🏻🧚‍♀️🏴‍☠️
    Peter Pan
  24. 🦊👦🏻🏹🌳
    Robin Hood
  25. 🐭🍽🧀👨‍🍳
    Ratatouille

Bron:

Categorieën
Mac

Update macOS via terminal

Het updaten van macOS via de App Store gaat bij mij niet altijd even snel. Na een snelle zoektocht kwam ik er achter dat het updaten ook via de terminal kan met het softwareupdate commando: 

Updating macOS through the App Store can take a very long time — for me it’s typically around 30 mins of rebooting and waiting. macOS has a built in softwareupdate utility, which is much faster.

https://9to5mac.com/2017/07/20/how-to-update-mac-using-terminal/
softwareupdate -l
Categorieën
PHP WordPress

WP-CLI – PHP Fatal error: Uncaught Error: Maximum function nesting level of ‘256’ reached

~/.wp-cli/config.yml

require:
  - config.php

~/.wp-cli/config.php

<?php

ini_set( 'xdebug.var_display_max_depth', -1 );
ini_set( 'xdebug.var_display_max_children', -1 );
ini_set( 'xdebug.var_display_max_data', -1 );

ini_set( 'xdebug.max_nesting_level', -1 );

Categorieën
Geen categorie

WordPress websites migreren via SSH, rsync, mysqldump, mysql

Het migreren van WordPress websites kan vaak erg snel gerealiseerd worden met behulp van SSH en enkele commando’s. Hieronder een aantal commando’s die hierbij van pas komen:

rsync --archive --verbose --compress --exclude-from=/data/www/example.com/public_html/.gitignore user@123.456.789.0:/home/user/domains/example.com/private_html/ /data/www/example.com/public_html/.
rsync --archive --verbose --compress --rsh='ssh -p 18765' /Users/remco/Downloads/example.com/ user@123.456.789.0:/home/user/public_html/.
mysqldump --host=123.456.789.0 --user=user_wp --password=******** --databases db_wp > /data/www/example.com/databases/db_wp.sql
mysql --host=123.456.789.0 --user=user_wp --password=******** mysql --execute="DROP DATABASE db_wp; CREATE DATABASE db_wp;"

mysql --host=123.456.789.0 --user=user_wp --password=******** db_wp < /data/www/example.com/databases/db_wp.sql
find /data/www/example.com/public_html/wp-content/uploads -type d -exec chmod 775 {} \;
find . -type d -exec chmod 755 {} +
curl http://*.s3.amazonaws.com/site.zip --output site.zip

unzip site.zip -d site

Categorieën
PHP WordPress

WordPress Coding Standards en Squiz.Commenting

Iedereen die met de WordPress Coding Standards weet waarschijnlijk ook dat deze kan controleren op hoe goed de code is gedocumenteerd. Hiervoor wordt gebruik gemaakt van de Squiz.Commenting sniffs. Bij Pronamic schakelen we deze sniffs vaak uit, omdat het voor maatwerk trajecten vaak niet uit kan om ook de documentatie tip top in orde te hebben. Voor de Pronamic Pay plugin willen we echter toewerken naar beter gedocumenteerde code. Daarom hebben we binnen deze plugin de Squiz.Commenting sniffs weer ingeschakeld. Dit resulteert momenteel nog in veel PHP_CodeSniffer fouten, zoals bijvoorbeeld:

   1 | ERROR | [ ] Missing file doc comment
     |       |     (Squiz.Commenting.FileComment.Missing)

Het is niet altijd even duidelijk wat PHP_CodeSnifer precies verwacht bij dergelijke fouten. De foutmelding geeft wel aan dat er een FileComment ontbreekt. Hoe deze FileComment er uit moet komen te zien wordt er echter niet bij vermeld. Na een kleine zoektocht kwam ik gelukkig wat resources tegen met meer informatie hierover:

Categorieën
Linux Mac WordPress

Sublime Text 3 en SourceTree openen via command line (CLI)

Als WordPress ontwikkelaar maak ik veel gebruik van de command line. Tijdens het ontwikkelen van WordPress oplossingen werk ik namelijk veel met command line tools zoals git, npm, grunt, gulp, composer, etc. Andere zaken regel ik weer liever via een app. Gelukkig kunnen deze vaak ook eenvoudig via de command line opgestart worden. Voor Sublime en SourceTree gebruik ik daarvoor de volgende commando's:

Sublime Text 3

➜ wp-pronamic-ideal git:(develop) subl .

SourceTree

➜ wp-pronamic-ideal git:(develop) stree .

Deze commando's openen automatisch Sublime Text 3 of SourceTree met de huidige project map. Hoe je deze commando's beschikbaar kunt maken is te lezen in de volgende artikelen: