In the first article of this series, we defined code smells and looked at a few examples of what they are and how we may refactor them so the quality of the code is improved. Recall:
[A] code smell, also known as a bad smell, in computer programming code, refers to any symptom in the source code of a program that possibly indicates a deeper problem.
Ultimately, we're working towards implementing WordPress-specific code sniffing rules, but before we do that it's important to familiarize yourself with PHP CodeSniffer.
In this article, we're going to take a look at what PHP CodeSniffer is, how to install it, how to run it against an example script, and how to refactor said script. Then we'll look at how we're going to move forward into WordPress-specific code.
If you have a local development environment set up, then great; if not, that's fine. I'll provide some links that will get you up and running quickly.
With that said, let's get started.
Before getting started, it's important that you have some type of local development environment, even if this only includes a copy of the PHP interpreter.
Note that if you're running a variant of Linux or OS X, there's a chance you already have PHP installed. If you do, then you don't need to worry about anything else in this section. To determine if you have PHP installed, run the following command on the command line:
$ php -v
You should see something like the following (though your output may be different based on the version of PHP you've opted to run):
PHP 5.6.10 (cli) (built: Jul 6 2015 14:28:54) Copyright (c) 1997-2015 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
If you're more advanced and have multiple copies of the project installed, then you can run:
$ which php
And you should see something like this:
/Applications/MAMP/bin/php/php5.6.10/bin/php
Though your output will vary based on where your copy of PHP is installed.
Though this series is geared primarily towards beginners, there may be some of you who are comfortable with downloading a copy of PHP and installing it on your system. If this is you, then grab a copy of PHP from the project's homepage, install it, and return to this tutorial.
If, on the other hand, this is new to you then you can choose to use one of the installers for your operating system on the PHP homepage linked above or one of the provided utilities below.
All of these packages have their own installers and will install PHP, MySQL, and Apache. As previously mentioned, we're primarily concerned with having a copy of PHP available on our system.
Once these are installed, try running the commands mentioned in the first part of this section (or your system's equivalent) and you should see similar output.
If you don't, then you'll likely need to add the path to PHP to your environmental variables. This is outside the scope of this tutorial, so please consult the documentation for the version of the project you installed.
With PHP now installed, we're ready to get started with catching and cleaning up our code smells.
You can find the official PHP CodeSniffer software on GitHub.

From the project's documentation:
PHP_CodeSniffer is a set of two PHP scripts; the mainphpcsscript that tokenizes PHP, JavaScript and CSS files to detect violations of a defined coding standard, and a secondphpcbfscript to automatically correct coding standard violations. PHP_CodeSniffer is an essential development tool that ensures your code remains clean and consistent.
If you've never seen anything like this before, it sounds really neat, doesn't it? I mean, it's a tool that's meant to help ensure a certain level of quality exists in your code!
Though the project mentions languages such as CSS and JavaScript, we're focused on PHP in this series. This doesn't mean it's not important to check the quality of those particular language files in your projects, though.
As great as it sounds, it still raises the questions: How do we install the software, and how do we begin checking our code?
Let's answer both of those questions now.
If you were to perform a Google search for how to install PHP CodeSniffer, you will likely end up with a variety of results, many of which will include using something called Pear.
Pear was once the de-facto package distribution system for PHP libraries, and though many packages are still available through the software, it's also being retired from other popular packages (such as PHPUnit).
For this reason, I often recommend using other methods of installation when they are available. This includes using tools such as Composer, which is arguably the most popular dependency management software for PHP.

If you've never used Composer before, don't worry. I'll provide all the steps that you need in order to get PHP CodeSniffer up and running on your machine with Composer and with minimal work. If you're interested in learning more, we have quite a few tutorials on how to use Composer, so feel free to check them out.
Before we install PHP CodeSniffer, we need to actually install Composer. Luckily, it's very easy to do so once you have PHP up and running on your local machine.
To install Composer, you can download this file and then execute the following command on the command line from wherever you downloaded the Composer installer:
$ php composer-setup.php --install-dir=bin --filename=composer
A note from the Composer installation instructions:
You can install Composer to a specific directory by using the--install-diroption and additionally (re)name it as well using the--filenameoption.
For more information, feel free to refer to the download instructions or view the entire project on GitHub.
Once it's installed, you're now able to use Composer to install third-party dependencies, such as PHP CodeSniffer, into your projects. Make note of where you've installed your copy of Composer, though. You'll need to refer to it when running it since we're going to be running it from the command line.
Anyway, let's go ahead and create a directory out of which we're going to run our PHP scripts. Though we won't have anything in this directory just yet, we need to create a file called composer.json.
I'm going to call my directory tutsplus-demo, and I'll include my Composer file in that directory to get started.

Once you have the file created, place the following code in the JSON file:
{
"require": {
"squizlabs/php_codesniffer": "2.*"
}
}In short, this tells Composer to install PHP CodeSniffer when you execute the proper command. Note that the require directive does the following:
Lists packages required by this package. The package will not be installed unless those requirements can be met.
You can read more about the Composer schema in the documentation.
Once Composer is installed and once you have your composer.json file looking like the code above, it's time to actually install PHP CodeSniffer. From the command line, issue the following command:
$ composer update
Note that this is predicated on the idea Composer is available publicly on your system. If not, you can execute it by typing the full path to the installed file or you can add it to your environmental variables and then restart your terminal session in order to reload the variables.
Once Composer has finished working, you should see something like this:

And your tutsplus-code directory should now look like this:

Notice specifically that you have a vendor directory. This means that Composer properly installed PHP CodeSniffer. At this point, we're ready to evaluate our PHP code.
First, let's take a sample script. The one we're going to be looking at can be found in this answer on Stack Overflow.
Create a file in your tutsplus-demo directory and name it sample.php. Then, make sure the file contains the following contents:
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>
Save your work. Next, we can run PHP CodeSniffer from the command line and have it evaluate the code in the script above using the standard set of rules.
From your terminal, enter the following command:
$ vendor/bin/phpcs sample.php
This should generate output that contains the following:
Skyhopper5:tutsplus-demo tommcfarlin$ vendor/bin/phpcs sample.php
FILE: /Users/tommcfarlin/Desktop/tutsplus-demo/sample.php
----------------------------------------------------------------------
FOUND 4 ERRORS AFFECTING 4 LINES
----------------------------------------------------------------------
2 | ERROR | [ ] Missing file doc comment
5 | ERROR | [x] No space found after comma in function call
7 | ERROR | [ ] Expected "if (...) {\n"; found "if(...) {\n"
9 | ERROR | [ ] Expected "if (...) {\n"; found "if(...) {\n"
----------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------
Time: 46ms; Memory: 3.5Mb
Skyhopper5:tutsplus-demo tommcfarlin$
Notice that it found four errors. The first column tells you which line the error is on, the second column states that it's an error (versus a warning), and then the rest tells you what it expected to see versus what it actually saw.
So let's clean up the file based on those errors. Generally speaking, we need to do the following:
if statements in the script.The end result would look something like this:
<?php
/**
* Determines if the file being uploaded is a legitimate image or not.
* If so, allows the file to be uploaded. Otherwise, prevents the upload
* from occurring.
*
* PHP Version 5
*
* @category Demo
* @package TutsPlus_Demo
* @author Tom McFarlin <tom@tommcfarlin.com>
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @link http://is.gd/dq0DhO
* @since 1.0.0
*/
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if (isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if ($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
?>
Next, run the script again and you shouldn't get any output. That is, you should be presented with the standard command prompt. Sometimes this mean something is broken, but in this case it means everything is running as expected
Not bad, right?
Now imagine what this could do for larger codebases and scripts that you're working with on a daily basis.
As important as it is to evaluate our code, to avoid code smells, and to aim for the highest quality possible, tools such as PHP CodeSniffer are not meant to be used as crutches. That means that we don't have an excuse to write bad code because another tool will catch it.
Because it won't always do so.
Instead, this is meant as a second pass of sorts. That is, it's meant to catch things that we may miss when writing code the first, second, or ninth time. The nice thing about this particular program is that you can load different rules into PHP CodeSniffer depending on the environment, framework, or library with which you're working.
And that's exactly what we're going to do with WordPress in the next article.
As far as introductory material is concerned, we've covered quite a bit of ground in this tutorial. That is, we've looked at setting up a basic development environment on our local machine that includes PHP.
Next, we've taken a look at Composer and how to get it installed on our system. We've written our first Composer file for retrieving dependencies, namely PHP CodeSniffer, and we've even evaluated and corrected results provided to us by the software.
If you're primarily a PHP developer, then I hope the first two articles in the series have been helpful, but if you're a WordPress developer then we have a bit more to cover.
In the final article in the series, we're going to turn our attention to WordPress. Because it has its own set of coding standards, we're going to look at how to load these rules into PHP CodeSniffer and then evaluate plugins, theme code, and so on to get an idea as to how to use this in our day-to-day work in our WordPress projects.
Before we move forward to the next article, review the code above and make sure that you have PHP and PHP CodeSniffer installed and that you're familiar with how it works, as we're going to be tying all of this together.
Finally, you can review all of my courses and tutorials on my profile page, and you can follow me on my blog and/or Twitter at @tommcfarlin where I talk about various software development practices especially in the context of WordPress.
Please don't hesitate to leave any questions or comments in the feed below, and I'll aim to respond to each of them.
The Best Small Business Web Designs by DesignRush
/
2Create Modern Vue Apps Using Create-Vue and Vite
/
8Pros and Cons of Using WordPress
/
-5How to Fix the “There Has Been a Critical Error in Your Website” Error in WordPress
How To Fix The “There Has Been A Critical Error in Your Website” Error in WordPress
How to Create a Privacy Policy Page in WordPress
/
7WordPress Website Maintenance Guide For Beginners
/
8How Long Does It Take to Learn JavaScript?
/
-1How Long Does it Take to Learn JavaScript
/
1The Best Way to Deep Copy an Object in JavaScript
/
-2
4
-6Adding and Removing Elements From Arrays in JavaScript
/
-2Create a JavaScript AJAX Post Request: With and Without jQuery
/
85 Real-Life Uses for the JavaScript reduce() Method
/
-9How to Enable or Disable a Button With [removed] jQuery vs. Vanilla
/
2How to Enable or Disable a Button With [removed] jQuery vs Vanilla
/
-3Confirm Yes or No With JavaScript
/
-4How to Change the URL in [removed] Redirecting
/
-315+ Best WordPress Twitter Widgets
/
-227 Best Tab and Accordion Widget Plugins for WordPress (Free & Premium)
/
1121 Best Tab and Accordion Widget Plugins for WordPress (Free & Premium)
/
-1130 HTML Best Practices for Beginners
/
-731 Best WordPress Calendar Plugins and Widgets (With 5 Free Plugins)
/
525 Ridiculously Impressive HTML5 Canvas Experiments
/
-4
1How to Implement Email Verification for New Members
/
4How to Create a Simple Web-Based Chat Application
/
730 Popular WordPress User Interface Elements
/
-4Top 18 Best Practices for Writing Super Readable Code
/
2Best Affiliate WooCommerce Plugins Compared
/
-1018 Best WordPress Star Rating Plugins
/
1510+ Best WordPress Twitter Widgets
/
320+ Best WordPress Booking and Reservation Plugins
/
5Working With Tables in React: Part Two
/
-3Best CSS Animations and Effects on CodeCanyon
/
-1730 CSS Best Practices for Beginners
/
3How to Create a Custom WordPress Plugin From Scratch
/
310 Best Responsive HTML5 Sliders for Images and Text… and 3 Free Options
/
-516 Best Tab and Accordion Widget Plugins for WordPress
/
-518 Best WordPress Membership Plugins and 5 Free Plugins
/
525 Best WooCommerce Plugins for Products, Pricing, Payments and More
/
210 Best WordPress Twitter Widgets
1 /
1312 Best Contact Form PHP Scripts for 2020
/
-420 Popular WordPress User Interface Elements
/
-410 Best WordPress Star Rating Plugins
/
-412 Best CSS Animations on CodeCanyon
/
-112 Best WordPress Booking and Reservation Plugins
/
120 Best WordPress Calendar Plugins and Widgets
/
-212 Elegant CSS Pricing Tables for Your Latest Web Project
/
824 Best WordPress Form Plugins for 2020
/
-214 Best PHP Event Calendar and Booking Scripts
/
-1Getting Started With Django: Newly Updated Course
/
-1Create a Blog for Each Category or Department in Your WooCommerce Store
/
28 Best WordPress Booking and Reservation Plugins
/
-15Best Exit Popups for WordPress Compared
/
19Best Exit Popups for WordPress Compared
/
-411 Best Tab & Accordion WordPress Widgets & Plugins
/
-1112 Best Tab & Accordion WordPress Widgets & Plugins
1 /
3New Course: Practical React Fundamentals
/
2Short Course: Better Angular App Architecture With Modules
/
3Preview Our New Course on Angular Material
/
5Build Your Own CAPTCHA and Contact Form in PHP
/
-1Object-Oriented PHP With Classes and Objects
/
1Best Practices for ARIA Implementation
/
-5Accessible Apps: Barriers to Access and Getting Started With Accessibility
/
-3Dramatically Speed Up Your React Front-End App Using Lazy Loading
/
1815 Best Modern JavaScript Admin Templates for React, Angular, and Vue.js
/
-1515 Best Modern JavaScript Admin Templates for React, Angular and Vue.js
/
319 Best JavaScript Admin Templates for React, Angular, and Vue.js
/
3New Course: Build an App With JavaScript and the MEAN Stack
/
11Hands-on With ARIA: Accessibility Recipes for Web Apps
/
810 Best WordPress Facebook Widgets
13Hands-on With ARIA: Accessibility for eCommerce
/
6New eBooks Available for Subscribers
/
-10Hands-on With ARIA: Homepage Elements and Standard Navigation
/
10
-6Site Accessibility: Getting Started With ARIA
/
5How Secure Are Your JavaScript Open-Source Dependencies?
/
-4New Course: Secure Your WordPress Site With SSL
/
-3Testing Components in React Using Jest and Enzyme
/
-9Testing Components in React Using Jest: The Basics
/
-515 Best PHP Event Calendar and Booking Scripts
/
-2Create Interactive Gradient Animations Using Granim.js
/
9How to Build Complex, Large-Scale Vue.js Apps With Vuex
1Examples of Dependency Injection in PHP With Symfony Components
/
-5Set Up Routing in PHP Applications Using the Symfony Routing Component
1 /
9A Beginner’s Guide to Regular Expressions in JavaScript
/
9Introduction to Popmotion: Custom Animation Scrubber
/
-5Introduction to Popmotion: Pointers and Physics
/
-10New Course: Connect to a Database With Laravel’s Eloquent ORM
/
-5How to Create a Custom Settings Panel in WooCommerce
/
-14Building the DOM faster: speculative parsing, async, defer and preload
1 /
320 Useful PHP Scripts Available on CodeCanyon
3 /
51How to Find and Fix Poor Page Load Times With Raygun
/
1Introduction to the Stimulus Framework
/
-11Single-Page React Applications With the React-Router and React-Transition-Group Modules
/
1
712 Best Contact Form PHP Scripts
1 /
-3Getting Started With the Mojs Animation Library: The ShapeSwirl and Stagger Modules
/
1Getting Started With the Mojs Animation Library: The Shape Module
/
-3Getting Started With the Mojs Animation Library: The HTML Module
/
4Project Management Considerations for Your WordPress Project
/
-78 Things That Make Jest the Best React Testing Framework
/
3Creating an Image Editor Using CamanJS: Layers, Blend Modes, and Events
/
-1New Short Course: Code a Front-End App With GraphQL and React
/
2Creating an Image Editor Using CamanJS: Applying Basic Filters
/
-14Creating an Image Editor Using CamanJS: Creating Custom Filters and Blend Modes
/
-1Modern Web Scraping With BeautifulSoup and Selenium
/
1Challenge: Create a To-Do List in React
1 /
-1Deploy PHP Web Applications Using Laravel Forge
/
-2Getting Started With the Mojs Animation Library: The Burst Module
/
6
-1010 Things Men Can Do to Support Women in Tech
/
-3A Gentle Introduction to Higher-Order Components in React: Best Practices
/
-4Challenge: Build a React Component
/
-4A Gentle Introduction to HOC in React: Learn by Example
/
3A Gentle Introduction to Higher-Order Components in React
/
-6Creating Pretty Popup Messages Using SweetAlert2
/
5Creating Stylish and Responsive Progress Bars Using ProgressBar.js
/
1818 Best Contact Form PHP Scripts for 2022
/
-3How to Make a Real-Time Sports Application Using Node.js
/
-1Creating a Blogging App Using Angular & MongoDB: Delete Post
/
-15Creating a Blogging App Using Angular & MongoDB: Show Post
/
9Creating a Blogging App Using Angular & MongoDB: Home
/
8
4Creating a Blogging App Using Angular & MongoDB: Login
/
13Creating Your First Angular App: Implement Routing
/
13Persisted WordPress Admin Notices: Part 4
/
-3Creating Your First Angular App: Components, Part 2
/
4Persisted WordPress Admin Notices: Part 3
/
4
9Persisted WordPress Admin Notices: Part 2
/
-2Create Your First Angular App: Storing and Accessing Data
/
4Persisted WordPress Admin Notices: Part 1
/
-2Error and Performance Monitoring for Web & Mobile Apps Using Raygun
/
5Using Luxon for Date and Time in JavaScript
7 /
-7How to Create an Audio Oscillator With the Web Audio API
/
-5How to Cache Using Redis in Django Applications
/
220 Essential WordPress Utilities to Manage Your Site
/
-6Introduction to API Calls With React and Axios
/
16Beginner’s Guide to Angular 4: HTTP
/
12Rapid Web Deployment for Laravel With GitHub, Linode, and RunCloud.io
/
10Beginners Guide to Angular 4: Routing
/
-8Beginner’s Guide to Angular 4: Components
/
3Creating a Drop-Down Menu for Mobile Pages
/
6Introduction to Forms in Angular 4: Writing Custom Form Validators
/
4Getting Started With Redux: Connecting Redux With React
/
15Getting Started With Redux: Learn by Example
/
15Getting Started With Redux: Why Redux?
/
10Understanding Recursion With JavaScript
/
-2How to Auto Update WordPress Salts
/
-4How to Download Files in Python
/
-3
-21Eloquent Mutators and Accessors in Laravel
1 /
15
-10
1210 Best HTML5 Sliders for Images and Text
/
7Site Authentication in Node.js: User Signup
/
-3Creating a Task Manager App Using Ionic: Part 2
/
3Creating a Task Manager App Using Ionic: Part 1
/
2Introduction to Forms in Angular 4: Reactive Forms
/
2
4Introduction to Forms in Angular 4: Template-Driven Forms
/
224 Essential WordPress Utilities to Manage Your Site
/
-325 Essential WordPress Utilities to Manage Your Site
/
-11Get Rid of Bugs Quickly Using BugReplay
1 /
-16Manipulating HTML5 Canvas Using Konva: Part 1, Getting Started
/
610 Must-See Easy Digital Downloads Extensions for Your WordPress Site
/
-222 Best WordPress Booking and Reservation Plugins
/
-4Understanding ExpressJS Routing
/
-615 Best WordPress Star Rating Plugins
/
11Creating Your First Angular App: Basics
/
-1Inheritance and Extending Objects With JavaScript
/
-9Introduction to the CSS Grid Layout With Examples
1 /
4
6Performant Animations Using KUTE.js: Part 5, Easing Functions and Attributes
/
-9Performant Animations Using KUTE.js: Part 4, Animating Text
/
-13Performant Animations Using KUTE.js: Part 3, Animating SVG
/
-8New Course: Code a Quiz App With Vue.js
/
-1Performant Animations Using KUTE.js: Part 2, Animating CSS Properties
/
3
8Performant Animations Using KUTE.js: Part 1, Getting Started
/
110 Best Responsive HTML5 Sliders for Images and Text (Plus 3 Free Options)
/
-3Single-Page Applications With ngRoute and ngAnimate in AngularJS
/
-13Deferring Tasks in Laravel Using Queues
/
-5
2Site Authentication in Node.js: User Signup and Login
/
11Working With Tables in React, Part Two
/
-17Working With Tables in React, Part One
/
4How to Set Up a Scalable, E-Commerce-Ready WordPress Site Using ClusterCS
/
-4New Course on WordPress Conditional Tags
/
3
-14Building With Vue.js 2 and Firebase
6 /
14
-8Best Unique Bootstrap JavaScript Plugins
/
-9
-2Essential JavaScript Libraries and Frameworks You Should Know About
/
7
1Vue.js Crash Course: Create a Simple Blog Using Vue.js
/
-13Build a React App With a Laravel RESTful Back End: Part 1, Laravel 5.5 API
/
5API Authentication With Node.js
/
-4Beginner’s Guide to Angular: HTTP
/
7Beginner’s Guide to Angular: Routing
/
-4Beginners Guide to Angular: Routing
/
-4Beginner’s Guide to Angular: Services
/
3How to Create a Custom Authentication Guard in Laravel
/
6Learn Computer Science With [removed] Part 3, Loops
/
-5Build Web Applications Using Node.js
/
1Learn Computer Science With [removed] Part 4, Functions
/
4Learn Computer Science With [removed] Part 2, Conditionals
/
11Learn Computer Science With [removed] Part 1, The Basics
/
-2Create Interactive Charts Using Plotly.js, Part 5: Pie and Gauge Charts
/
-9Create Interactive Charts Using Plotly.js, Part 4: Bubble and Dot Charts
/
16Create Interactive Charts Using Plotly.js, Part 3: Bar Charts
/
-12Awesome JavaScript Libraries and Frameworks You Should Know About
/
-5Create Interactive Charts Using Plotly.js, Part 2: Line Charts
/
-8Bulk Import a CSV File Into MongoDB Using Mongoose With Node.js
/
-6Build a To-Do API With Node, Express, and MongoDB
/
-7Getting Started With End-to-End Testing in Angular Using Protractor
/
9TypeScript for Beginners, Part 4: Classes
/
-17Object-Oriented Programming With JavaScript
/
510 Best Affiliate WooCommerce Plugins Compared
/
6Stateful vs. Stateless Functional Components in React
/
8Make Your JavaScript Code Robust With Flow
/
-3Build a To-Do API With Node and Restify
/
6Testing Components in Angular Using Jasmine: Part 2, Services
/
1Testing Components in Angular Using Jasmine: Part 1
/
1Creating a Blogging App Using React, Part 6: Tags
/
-10React Crash Course for Beginners, Part 3
/
4React Crash Course for Beginners, Part 2
/
8React Crash Course for Beginners, Part 1
/
2Set Up a React Environment, Part 4
1 /
10Set Up a React Environment, Part 3
/
-11New Course: Get Started With Phoenix
/
-9Set Up a React Environment, Part 2
/
1Command Line Basics and Useful Tricks With the Terminal
/
4How to Create a Real-Time Feed Using Phoenix and React
/
-4Build a React App With a Laravel Back End: Part 2, React
/
3Build a React App With a Laravel RESTful Back End: Part 1, Laravel 9 API
/
-5Creating a Blogging App Using React, Part 5: Profile Page
/
-1Pagination in CodeIgniter: The Complete Guide
/
21JavaScript-Based Animations Using Anime.js, Part 4: Callbacks, Easings, and SVG
JavaScript-Based Animations Using Anime.js, Part 3: Values, Timeline, and Playback
/
-1Learn to Code With [removed] Part 1, The Basics
/
410 Elegant CSS Pricing Tables for Your Latest Web Project
/
-8Getting Started With the Flux Architecture in React
/
-2Getting Started With Matter.js: The Composites and Composite Modules
/
2Getting Started With Matter.js: The Engine and World Modules
/
1610 More Popular HTML5 Projects for You to Use and Study
/
-23Understand the Basics of Laravel Middleware
/
-3Iterating Fast With Django & Heroku
/
8Creating a Blogging App Using React, Part 4: Update & Delete Posts
/
4Creating a jQuery Plugin for Long Shadow Design
/
-11How to Register & Use Laravel Service Providers
2 /
-13Unit Testing in React: Shallow vs. Static Testing
/
4Creating a Blogging App Using React, Part 3: Add & Display Post
/
15Creating a Blogging App Using React, Part 2: User Sign-Up
20 /
-3Creating a Blogging App Using React, Part 1: User Sign-In
/
79 More Popular HTML5 Projects for You to Use and Study
/
16Creating a Grocery List Manager Using Angular, Part 2: Managing Items
/
89 Elegant CSS Pricing Tables for Your Latest Web Project
/
-1Dynamic Page Templates in WordPress, Part 3
/
-2Angular vs. React: 7 Key Features Compared
/
6Creating a Grocery List Manager Using Angular, Part 1: Add & Display Items
/
2New eBooks Available for Subscribers in June 2017
/
6Create Interactive Charts Using Plotly.js, Part 1: Getting Started
/
10The 5 Best IDEs for WordPress Development (And Why)
/
-133 Popular WordPress User Interface Elements
/
2New Course: How to Hack Your Own App
/
-11How to Install Yii on Windows or a Mac
/
4What Is a JavaScript Operator?
/
-6How to Register and Use Laravel Service Providers
/
8
waly Good blog post. I absolutely love this…