Cela dit, il est toujours possible de feinter, et on peut simuler le polymorphisme en PHP. Sans plus attendre, voilà un exemple:

function doSomething($arg) {
	switch(gettype($arg)) {
		case 'integer':
			return _doSometing_Integer($arg);
		break;
		case 'array':
			return _doSomething_Array($arg);
		break;
		default:
			return _doSometing_String((string) $arg);
		break;
	}
}

Voilà. C'est très basique, mais l'idée est là. Un petit tour sur le manuel PHP nous indique qu'utiliser gettype n'est pas très recommandé, nous allons donc procéder autrement (et passer en objet par la même occasion):

class Polymorph {
	public function doSometing($arg) {
		switch(true) {
			case is_array($arg):
				return $this->_doSomething_Array($arg);
			break;
		}
	}

	private function _doSomething_Array($arg) {

	}
}

On aurait également pu faire, pour plus de souplesse (mais avec gettype):

class Polymorph {
	public function doSomething($arg) {
		$method = '_doSomething_.'.ucfirst(gettype($arg));
		if (method_exists($this, $method)) {
			call_user_func(array($this, $method), $arg);
		} else {
			// default comportement
		}
	}
}