<?php
// Outside of the application, e.g. DB, RPC or some storage.
function addSomeIntegerFieldToDB($value)
{
$sql = 'INSERT INTO mytable (integer_field) VALUES (:int)';
// $st = $pdo->prepare($sql);
// $st->execute(array('int' => $value);
echo "executing query: ".str_replace(':int', $value, $sql)." \n";
}
// the application:
global $conditional;
global $withAssert;
class X {
public function doSmth($id)
{
global $conditional;
global $withAssert;
if ($withAssert) {
// Assertion will run independently of $conditional, thus preventing a wrong $id to be passed to ->doSmth() method
assert(is_int($id), new \InvalidArgumentException('wot ar y doin'));
}
if ($conditional) {
addSomeIntegerFieldToDB($id);
}
}
}
$obj = new X;
$withAssert = false;
$conditional = true;
// Assert off, conditional on
$obj->doSmth(13);
$obj->doSmth('x');
// Assert off, conditional off
$conditional = false;
$obj->doSmth(13);
$obj->doSmth('x');
// Assert on, conditional on
$withAssert = true;
$conditional = true;
$obj->doSmth(13);
$obj->doSmth('x');
// Assert on, conditional off
$conditional = false;
$obj->doSmth(13);
$obj->doSmth('x');