Skip to content

Instantly share code, notes, and snippets.

@Ocramius
Last active July 22, 2017 15:20
Show Gist options
  • Star 11 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Ocramius/26a78f655e486718f858 to your computer and use it in GitHub Desktop.
Save Ocramius/26a78f655e486718f858 to your computer and use it in GitHub Desktop.
PissOff: a valid, polite and useful alternative to the `void` return type in PHP
vendor
composer.lock
{
"autoload": {
"classmap": [
"PissOff.php"
]
}
}
<?php
declare(strict_types=1);
namespace MyStuff;
require_once __DIR__ . '/vendor/autoload.php';
function fortunately_you_can_tell_your_users_to_piss_off() : PissOff {
return PissOff::wanker();
};
var_dump(fortunately_you_can_tell_your_users_to_piss_off()->i_told_you_to_piss_off);
<?php
declare(strict_types=1);
namespace MyStuff;
final class PissOff
{
/**
* @var \LogicException
*/
private $pissOff;
public static function __callStatic(string $method, array $args)
{
throw new \LogicException('You are not supposed to interact with this object: piss off.');
}
private function __construct()
{
$this->pissOff = new \LogicException('You are not supposed to interact with this object: piss off.');
}
public static function wanker() : self
{
return new self();
}
public function __call(string $method, array $args)
{
throw $this->pissOff;
}
public function __get(string $name)
{
throw $this->pissOff;
}
public function __set(string $name, $value)
{
throw $this->pissOff;
}
public function __isset(string $name)
{
throw $this->pissOff;
}
public function __unset(string $name)
{
throw $this->pissOff;
}
private function __wakeup()
{
}
private function __sleep()
{
}
private function __clone()
{
}
}
<?php
declare(strict_types=1);
namespace MyStuff;
require_once __DIR__ . '/vendor/autoload.php';
function doesnt_it_suck_that_php_has_no_void_return_type() {
};
var_dump(doesnt_it_suck_that_php_has_no_void_return_type()->yeah_it_sucks);
@Ocramius
Copy link
Author

@jp7carlos that is AWESOME!

@Bilge
Copy link

Bilge commented Mar 10, 2016

You have code duplication on lines 16 and 21. I honestly expected better.

@Ray-Paseur
Copy link

This just made my day!

@natenolting
Copy link

lol, oh you guys

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment