.. page:: titlePage .. class:: centredTitle How do I get started? .. page:: .. class:: centredTitle ``php -v`` .. page:: ``PHP 8.1.0 (cli) (built: Nov 30 2021 07:15:23) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.0, Copyright (c) Zend Technologies`` .. page:: .. class:: centredTitle ``vim index.php`` .. raw:: pdf TextAnnotation "Create a new file called 'index.php' in the text editor of your choice." .. page:: standardPage Your first PHP file =================== .. code-block:: php :linenos: <?php // index.php .. raw:: pdf TextAnnotation "Add an opening tag (closing tag is optional, and in some cases should not be used)." Your first PHP file =================== .. code-block:: php :linenos: <?php // index.php echo 'Hello World'; .. page:: titlePage .. class:: centredTitle ``php index.php`` .. page:: .. class:: centredTitle ``php -S localhost:8000`` .. page:: titlePage ``/app # php -S localhost:8000`` ``[Tue Mar 8 20:52:39 2022] PHP 8.1.0 Development Server (http://localhost:8000) started`` .. raw:: pdf TextAnnotation "PHP's local development web server. Fine for simple scripts or apps." .. page:: imagePage .. image:: images/hello-world.png :width: 23cm .. page:: titlePage .. class:: centredTitle ``docker run --rm -v $PWD:/app -w /app php:8.1-cli-alpine php index.php`` .. page:: .. class:: centredTitle ``docker run --rm -v $PWD:/app -w /app php:7.4-cli-alpine php index.php`` .. raw:: pdf TextAnnotation "7.4 instead of 8.1" .. page:: .. class:: centredTitle ``docker run --rm -v $PWD:/var/www/html -p 80:80 php:8.1-apache`` .. raw:: pdf TextAnnotation "Apache rather than CLI" .. page:: standardPage .. code-block:: php :linenos: <?php // index.php function say() { echo 'Hello!'; } .. raw:: pdf TextAnnotation "Global function." .. page:: .. code-block:: php :linenos: <?php // index.php function say($value) { echo $value; } .. page:: .. code-block:: php :linenos: <?php // index.php function say(string $value): void { echo $value; } .. raw:: pdf TextAnnotation "In PHP 7, we can declare type hints on scalar values (e.g. string). Arrays and classes were possible in previous versions." TextAnnotation "We can also declare a return type. In this case, there is nothing returned, so the return type is `void`." .. page:: .. code-block:: php :linenos: <?php // index.php function say(string $value): string { return $value; } .. raw:: pdf TextAnnotation "Return a string rather than echoing a string." .. page:: .. code-block:: php :linenos: <?php // src/Person.php class Person { public function say(string $value): void { echo $value; } } .. raw:: pdf TextAnnotation "Move it into a class called `Person`. Function now becomes a method, though behaves in exactly the same way." .. page:: .. code-block:: php :linenos: <?php // Version 1. say(); .. page:: .. code-block:: php :linenos: <?php // Version 1. say(); // Version 2. say('something'); .. raw:: pdf TextAnnotation "First version with no arguments." TextAnnotation "Second version providing the text as an argument." TextAnnotation "Third version using the Person class." .. page:: .. code-block:: php :linenos: <?php // Version 1. say(); // Version 2. say('something'); // Version 3. $person = new Person(); $person->say('something');