1
0
mirror of https://github.com/restoreddev/phpapprentice.git synced 2025-08-16 19:54:39 +02:00

Created initial site setup with hugo

This commit is contained in:
Andrew Davis
2019-07-12 19:21:18 -05:00
parent 77a0d2616b
commit e09557cf2c
80 changed files with 732 additions and 10488 deletions

81
content/15-static.md Normal file
View File

@@ -0,0 +1,81 @@
When writing a class, all of the properties and methods are being defined for the object
that will be created from the class.
```php
<?php
class House
{
public $color;
public function __construct($color)
{
$this->color = $color;
}
}
```
Like building a house, a class is a blueprint that
defines what the house can do and the object is the house itself that can actually
perform the actions defined in the blueprint.
```php
$house = new House('Green');
```
However, what if you want the blueprint to have properties and methods?
That is when you use the `static` keyword. In this class, we will define a default color
on the class itself and then use it when creating a new object.
```php
class Skyscraper
{
private static $popularColor;
public $color;
public static function setDefaultColor($color)
{
self::$popularColor = $color;
}
public function __construct()
{
$this->color = self::$popularColor;
}
}
```
You can access static methods and properties using double colons on `self` inside the object
or on the class name outside of the object. Static methods and properties can only access
other static methods and properties.
```php
Skyscraper::setDefaultColor('Grey');
$skyscraper = new Skyscraper();
echo $skyscraper->color . "\n";
```
Often, you will see static constructors in PHP.
A static constructor creates a new instance of an object. Why would do that when you can just use "new Class" to create
the object? A common reason is to make the code more readable.
```php
class TinyHouse
{
private $color;
private $wheels;
private $trailer;
public static function build($color, $wheels, $trailer)
{
return new self($color, $wheels, $trailer);
}
public function __construct($color, $wheels, $trailer)
{
$this->color = $color;
$this->wheels = $wheels;
$this->trailer = $trailer;
}
}
```
Using `build` can make more sense than `new`, but it is ultimately a personal preference.
```php
$house = TinyHouse::build('Blue', 4, true);
```