Skip to content

Instantly share code, notes, and snippets.

@rlandas
Last active November 7, 2018 13:18
Show Gist options
  • Save rlandas/26257062f345f7c66e699e7cc9f8eede to your computer and use it in GitHub Desktop.
Save rlandas/26257062f345f7c66e699e7cc9f8eede to your computer and use it in GitHub Desktop.
EthicalJobs

README

Lannister Family

Installation

git clone https://gist.github.com/26257062f345f7c66e699e7cc9f8eede.git lannister

Run

cd lannister
php index.php
<?php
namespace Cinema\Cast;
/**
* Family interface
*
* @author Raphael Landas
* @package MyApp
* @copyright 2018 EthicalJobs
* @version 1.0.0
* @since 1.0.0
*/
interface CastInterface
{
/**
* Get the first name
*
* @return string
*/
public function getFirstName();
/**
* Get the last name
*
* @return string
*/
public function getLastName();
/**
* Get the full name
*
* @return string
*/
public function getName();
}
<?php
namespace Cinema\Cast;
/**
* Cersei Lannister entity model
*
* @author Raphael Landas
* @package Cinema\Cast
* @copyright 2018 EthicalJobs
* @version 1.0.0
* @since 1.0.0
*/
class CerseiLannister implements CastInterface, ChildInterface
{
/**
* First name
*
* @var string
*/
private $firstName = 'Cersei';
/**
* Last name
*
* @var string
*/
private $lastName = 'Lannister';
/**
* Child
*
* @var
*/
private $child;
/**
* CerseiLannister constructor.
*
* @param CastInterface $child
*/
public function __construct(CastInterface $child)
{
$this->child = $child;
}
/**
* Get the sfirst name
*
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* Get the last name
*
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
/**
* Get the full name
*
* @return string
*/
public function getName()
{
return $this->firstName . ' ' . $this->lastName;
}
/**
* Get the child entity
*
* @return CastInterface
*/
public function getChild()
{
return $this->child;
}
/**
* Set the child entity
*
* @param CastInterface $child
* @return $this
*/
public function setChild(CastInterface $child)
{
$this->child = $child;
return $this;
}
}
<?php
namespace Cinema\Cast;
/**
* Child interface
*
* @author Raphael Landas
* @package MyApp
* @copyright 2018 EthicalJob
* @version 1.0.0
* @since 1.0.0
*/
interface ChildInterface
{
/**
* Get the child entity
*
* @return CastInterface
*/
public function getChild();
}
<?php
namespace Cinema\Cast\Families;
use Cinema\Cast\CastInterface;
/**
* Family interface
*
* @author Raphael Landas
* @package Cinema\Cast\Families
* @copyright 2018 EthicalJobs
* @version 1.0.0
* @since 1.0.0
*/
interface FamilyInterface
{
/**
* Add a family member
*
* @param string $name
* @param CastInterface $member
* @return $this
*/
public function addMember($name, CastInterface $member);
}
<?php
namespace MyApp;
use Cinema\Cast\Families;
use Cinema\Cast;
$theLannisters = new Families\TheLannisters();
$theLannisters->addMember('jaime', new Cast\Jaime())
->addMember('joanna', new Cast\JoannaLannister())
->addMember('cersei', new Cast\CerseiLannister((new Cast\JoannaLannister())));
$familyNames = $theLannisters->getFamilyNames();
echo "The Lannisters:" . PHP_EOL;
foreach ($familyNames as $familyName) {
echo $familyName . PHP_EOL;
}
<?php
namespace Cinema\Cast;
/**
* Jaime Lannister entity model
*
* @author Raphael Landas
* @package Cinema\Cast
* @copyright 2018 EthicalJobs
* @version 1.0.0
* @since 1.0.0
*/
class Jaime implements CastInterface
{
/**
* First name
*
* @var string
*/
private $firstName = 'Jaime';
/**
* Last name
*
* @var string
*/
private $lastName = 'Lannister';
/**
* Get the sfirst name
*
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* Get the last name
*
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
/**
* Get the full name
*
* @return string
*/
public function getName()
{
return $this->firstName . ' ' . $this->lastName;
}
}
<?php
namespace Cinema\Cast;
/**
* Joann Lannister entity model
*
* @author Raphael Landas
* @package Cinema\Cast
* @copyright 2018 EthicalJobs
* @version 1.0.0
* @since 1.0.0
*/
class JoannaLannister implements CastInterface
{
/**
* First name
*
* @var string
*/
private $firstName = 'Joanna';
/**
* Last name
*
* @var string
*/
private $lastName = 'Lannister';
/**
* Get the sfirst name
*
* @return string
*/
public function getFirstName()
{
return $this->firstName;
}
/**
* Get the last name
*
* @return string
*/
public function getLastName()
{
return $this->lastName;
}
/**
* Get the full name
*
* @return string
*/
public function getName()
{
return $this->firstName . ' ' . $this->lastName;
}
}
<?php
namespace Cinema\Cast\Families;
use Cinema\Cast\CastInterface;
use Cinema\Cast\ChildInterface;
/**
* The Lannister family entity model
*
* @author Raphael Landas
* @package Cinema\Case\Families
* @copyright 2018 EthicalJobs
* @version 1.0.0
* @since 1.0.0
*/
class TheLannisters implements FamilyInterface
{
/**
* Members collection
*
* @var array
*/
private $members = [];
/**
* Add member to the family
*
* @param string $name
* @param CastInterface $member
* @return self
*/
public function addMember($name, CastInterface $member)
{
$this->members[$name] = v;
return $this;
}
/**
* Get all family names
*
* @return array
*/
public function getFamilyNames()
{
$output = [];
foreach ($this->members as $member) {
$output[] = $member->getName();
if ($member instanceof ChildInterface) {
$output[] = $member->getChild()
->getName();
}
}
return $output;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment