Categories
BEST PHP CODE

Force PHP ERRORS

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
Categories
BEST PHP CODE PHP php8

Null Safe operator is awesome ! Great code

Awesome piece of work, imagine to replace the follwoing piece of code

$country =  null;
 
if ($session !== null) {
    $user = $session->user;
 
    if ($user !== null) {
        $address = $user->getAddress();
 
        if ($address !== null) {
            $country = $address->country;
        }
    }
}
 

by just

$country = $session?->user?->getAddress()?->country; 

Categories
BEST PHP CODE PHP PHPUnit

Useful catch (\Throwable $e)

catch (\Throwable $e) turned out to be very useful while coding in PHP.

When Exception were caught in specific instances, catch throwable would catch anything that would impede the code to run

Example below in a phpUnit scenario :

        try {
            $r = $this->checkKeys($data);
        } catch (\Throwable $e) {
            $this->assertEquals($e->getCode(), 404);
        }
Categories
BEST PHP CODE

Clean Code Summary

SOURCE https://gist.github.com/wojteklu/73c6914cc446146b8b533c0988cf8d29

Code is clean if it can be understood easily – by everyone on the team. Clean code can be read and enhanced by a developer other than its original author. With understandability comes readability, changeability, extensibility and maintainability.


General rules

  1. Follow standard conventions.
  2. Keep it simple stupid. Simpler is always better. Reduce complexity as much as possible.
  3. Boy scout rule. Leave the campground cleaner than you found it.
  4. Always find root cause. Always look for the root cause of a problem.

Design rules

  1. Keep configurable data at high levels.
  2. Prefer polymorphism to if/else or switch/case.
  3. Separate multi-threading code.
  4. Prevent over-configurability.
  5. Use dependency injection.
  6. Follow Law of Demeter. A class should know only its direct dependencies.

Understandability tips

  1. Be consistent. If you do something a certain way, do all similar things in the same way.
  2. Use explanatory variables.
  3. Encapsulate boundary conditions. Boundary conditions are hard to keep track of. Put the processing for them in one place.
  4. Prefer dedicated value objects to primitive type.
  5. Avoid logical dependency. Don’t write methods which works correctly depending on something else in the same class.
  6. Avoid negative conditionals.

Names rules

  1. Choose descriptive and unambiguous names.
  2. Make meaningful distinction.
  3. Use pronounceable names.
  4. Use searchable names.
  5. Replace magic numbers with named constants.
  6. Avoid encodings. Don’t append prefixes or type information.

Functions rules

  1. Small.
  2. Do one thing.
  3. Use descriptive names.
  4. Prefer fewer arguments.
  5. Have no side effects.
  6. Don’t use flag arguments. Split method into several independent methods that can be called from the client without the flag.

Comments rules

  1. Always try to explain yourself in code.
  2. Don’t be redundant.
  3. Don’t add obvious noise.
  4. Don’t use closing brace comments.
  5. Don’t comment out code. Just remove.
  6. Use as explanation of intent.
  7. Use as clarification of code.
  8. Use as warning of consequences.

Source code structure

  1. Separate concepts vertically.
  2. Related code should appear vertically dense.
  3. Declare variables close to their usage.
  4. Dependent functions should be close.
  5. Similar functions should be close.
  6. Place functions in the downward direction.
  7. Keep lines short.
  8. Don’t use horizontal alignment.
  9. Use white space to associate related things and disassociate weakly related.
  10. Don’t break indentation.

Objects and data structures

  1. Hide internal structure.
  2. Prefer data structures.
  3. Avoid hybrids structures (half object and half data).
  4. Should be small.
  5. Do one thing.
  6. Small number of instance variables.
  7. Base class should know nothing about their derivatives.
  8. Better to have many functions than to pass some code into a function to select a behavior.
  9. Prefer non-static methods to static methods.

Tests

  1. One assert per test.
  2. Readable.
  3. Fast.
  4. Independent.
  5. Repeatable.

Code smells

  1. Rigidity. The software is difficult to change. A small change causes a cascade of subsequent changes.
  2. Fragility. The software breaks in many places due to a single change.
  3. Immobility. You cannot reuse parts of the code in other projects because of involved risks and high effort.
  4. Needless Complexity.
  5. Needless Repetition.
  6. Opacity. The code is hard to understand.
Categories
BEST PHP CODE

Best PHP comment !

Hello developers,

Here is my typical php comment/header for each of my php functions. Very useful and pragmatic. They provide a clear indication what the function is doing, inputs, outputs and exceptions. This is the art of coding ! Clear readibility and full transparency on the intentions of the functions.

I would definitely make this a requirement for programmer team. Additional work but useful. And if it is an API I would use the zircote/swagger-php library to generate on the fly an amazing swagger documentation

/**
 * Throw Exception If Parameter Is Not Set
 *
 * @param object $requestObjectBody
 * @param int $httpCode
 * @param string $httpMessage
 *
 * @return void
 *
 * @throws \Exception $exception
 *
 * @author  David Raleche <[email protected]>
 * @since 10-09-2020
 * @version 10-09-2020
 * @internal <ticket-number>
 */
public static function throwExceptionIfParameterNotSet($param, int $httpCode, string $httpMessage)
{
    if (is_null($param) or empty($param)) {
        throw new \Exception(
            $httpMessage,
            $httpCode
        );
    }
}

CIO/Managers : When having interns in your company the first exercise to give them is to go trhough existing code and add the following blocs of PHP docs. This will help them understand the code and this will improve considerable the readability of the legacy code. By doing so we quickly pinpoint the function to refactor

I usually give them the task to refactor functions being too long. More than 50 lines

David Raleche PHP good practice
David Raleche PHP good practice php developers
Categories
BEST PHP CODE PHP

How to address the undefined function yaml_parse_file ?

Here are the steps when you encounter the error below, it means that the yaml library is missing as it is not native to php per say

undefined function yaml_parse_file

Install YAML library for PHP when you see the error below

yum search yaml

First step is to install yaml via pecl

pecl install yaml-2.0.0

Second step is to create the following file

/etc/php/conf.d/ext-yaml.ini

And add the following line

echo "extension=yaml.so"

Then restart php server

service php-fpm restart
Categories
BEST PHP CODE PHP

How to setup a CRON JOB for apache/httpd to restart automatically ?


Very helpful website top figure out crontab sequence

https://crontab.guru/#0_0_*_*_*

Every 30 minutes 

/etc/crontab

  */30  *  *  *  *       root /etc/init.d/httpd restart > /dev/null 2>&1

  */30  *  *  *  *       root /etc/init.d/mysql restart > /dev/null 2>&1

Every hour

/etc/crontab

  0  *  *  *  *       root /etc/init.d/httpd restart > /dev/null 2>&1

Every minute

/etc/crontab

  *  *  *  *  *       root /etc/init.d/httpd restart > /dev/null 2>&1

Check logs 

tail n- 200  /var/log/cron

tail n- 200  /var/log/messages

Plus link here regarding dev/null 2>&1

————————————————————————

Categories
BEST PHP CODE PHP

How to use PHP DocBlock ?

/**
 * Returns a list of XXXXXXX
 *
 * @param string $route_group_uuid
 *
 * @return Array $listCarrierRoute
 *
 * @throws \Exception
 *
 * @version 05-05-2020
 * @author David Raleche <[email protected]>
 * @reference JIRA Ticket PMM2-862 Create route groups XXXXX
 */
Categories
BEST PHP CODE EasyPhp PHP

What to do – PHP session slow ?

Solution

Increase memory size

memory_limit = 2048M
Categories
BEST PHP CODE

Force to write debugging messages in PhpUnit

If you found yourself trying to debug PhpUnit the following php line will relieve your frustration. This line will instantly output the message or variables values that you are trying to debug

fwrite(STDERR, "TEST");