Category: Code

  • Checking Which PHP Libraries are on your Server

    Google Analytics 4 API requires the bcmath PHP extension to be installed but not every server will have it. To find out if you do type the following line in terminal.

    php -r "print_r(get_loaded_extensions());"
    
    The output will be something like you see below. On this instance you can see that I have bcmath installed already.

    If you don’t have bcmath installed already then you’ll need to run the following command, assuming you have PHP 8.0 installed and that your server is uses apt to install its packages.

    apt-get install php8.0@bcmath

    Once that’s installed you’re ready to use Google Analytics 4 API to build your own analytics dashboard.

  • Features I Love in PHP 8

    PHP 7.4 went end of life at the end of November 2022 so I’ve been digging into what PHP 8 brings us, besides noticable performance improvements.

    Here are the things I’m looking forward to right now.

    Match Expression

    Switch statements are powerful, and can be quite unwieldy if they get long enough. PHP 8 now brings us Match Expression to help clean up Switch.

    In PHP 7 a switch statement that needed to return different text depending on input would look something like this.

    switch( $input_text ){
    	case 'one':
    		$output_text = 'one';
    		break;
    	case 'two':
    		$output_text = 'two';
    		break;
    	case 'three':
    		$output_text = 'three';
    		break;
    }
    

    PHP 8 allows us to simplify that to:

    $output_text = match( $input_text ){
    	'one' => 'one',
    	'two' => 'two',
    	'three' => 'three',
    }
    

    Far less typing and easier to read.

    Better String Handling

    There are three excellent new string functions to be used.

    str_contains( $haystack, $needle ) returns true if the string ($needle) is contained inside the $haystack. The following will all evaluate to true.

    // true because `thing` is somewhere in the string
    str_contains( 'thing-one and thing-two', 'thing' );
    str_contains( 'one-thing and another', 'thing' );
    

    There are also two functions that allow you to evaluate if your string starts or ends with the search parameter.

    // this is true
    str_starts_with( 'thing-one thing-two', 'thing' );
    // this is false
    str_starts_with( 'one-thing and another', 'thing' );
    
    // this is true
    str_ends_with( 'thing-one thing-two', 'two' );
    // this is false
    str_ends_with( 'two-thing and another', 'two' );
    

    Nullsafe Operator

    We’ve all been in the spot where we have a nested object and we need to check at mutiple levels to see if we have a null value before we finally access the final item we want.

    In PHP 7 our code would look something like this:

    if ( $user->address ){
    	echo $user->address->street;
    }
    

    Now with the nullsafe operator we could write the entire statement in one line.

    echo $user?->address?->street;
    

    If we have a null value at any level in that chain it will return null.

    PHP 8 Speed Improvements

    While PHP 8 doesn’t bring a massive speed boost like PHP 7 did, we still see some notable improvements. Kinsta showed that, compared to PHP 7.2, PHP 8.0 can handle 50% more requests.

    I’ve upgraded 80+ sites I run and we’ve had a number of customers reach out asking what we did to speed the sites up. They had no idea anything was coming so this unprompted feedback from non-technical users shows that people notice when your site gets faster.

    Can we use PHP 8 in WordPress?

    Yeah the answer to this question for WordPress developers is, no you can’t start using PHP 8 right now for public projects like plugins/themes. According to WordPress.org statistics 56.4% of WordPress sites are still using PHP 7.4. If we broaden out our stats to look at any site running PHP 7, we have about 73% of active WordPress installs using PHP 7.

    For my regular coding work, I could start using these PHP 8 features but only for plugins that I know are going to be on our install only. I actually can’t even do that until I resolve one or two legacy issues that have 4 of our sites running PHP 7.4 still.

    We’ve only got a year until PHP 8.0 heads to end of life though, so maybe next year I can start using everything in PHP 8 without worrying about publicly released code.

  • Limit Vim-ACK Search by filetype/file extension

    I took a detour for a good chunk of the year to VSCode, but as always I missed the keyboard focus of Vim so I’m back there.

    One thing I did regularly in VSCode was to limit a search for a string to a specific filetype. I didn’t know how to do that in Vim until today.

    ACK $term --type=php will limit your search term to files with the .php extension.

    You can find my WordPress specific vim configuration here on Github. I need to dig back into it and update it because I’m a Vim user.

    You can find the full documentation on ACK here.