Interfaces and Traits
Function Contract
A function can ask for an interface and accept any object that implements it.
Function Contract
function_contract.php
<?php
interface Labeler
{
public function label(string $value): string;
}
class BracketLabeler implements Labeler
{
public function label(string $value): string
{
return "[" . $value . "]";
}
}
function makeLabel(Labeler $labeler, string $value): string
{
return $labeler->label($value);
}
$value = ;
$label = makeLabel(new BracketLabeler(), $value);
echo "value=" . $value . "\n";
echo "label=" . $label . "\n";
<?php
interface Labeler
{
public function label(string $value): string;
}
class BracketLabeler implements Labeler
{
public function label(string $value): string
{
return "[" . $value . "]";
}
}
function makeLabel(Labeler $labeler, string $value): string
{
return $labeler->label($value);
}
$value = ;
$label = makeLabel(new BracketLabeler(), $value);
echo "value=" . $value . "\n";
echo "label=" . $label . "\n";
<?php
interface Labeler
{
public function label(string $value): string;
}
class BracketLabeler implements Labeler
{
public function label(string $value): string
{
return "[" . $value . "]";
}
}
function makeLabel(Labeler $labeler, string $value): string
{
return $labeler->label($value);
}
$value = ;
$label = makeLabel(new BracketLabeler(), $value);
echo "value=" . $value . "\n";
echo "label=" . $label . "\n";
interface parameter
Interface parameters make the function depend on behavior, not a concrete class.