php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #67210 This is a core php feature update request
Submitted: 2014-05-05 14:24 UTC Modified: 2014-05-05 14:57 UTC
From: mrdaniellee2020 at gmail dot com Assigned:
Status: Not a bug Package: Testing related
PHP Version: Irrelevant OS: All
Private report: No CVE-ID: None
 [2014-05-05 14:24 UTC] mrdaniellee2020 at gmail dot com
Description:
------------
Hi,

Earlier today i was reading about the newly release Facebook Hack Languages and Tools online with this they have added a few new features which are quite interesting.

However there was one feature they added which i had already thought of in the past which i thought would be excellent if php had this installed by default.

Its literally to check return values of methods and classes in order to check returned values just as easily as you can check input values.

I wrote a quick class explaining exactly this.
I think it would be useful to have by default in php as i think it would help to trim down php unit testing massively.

All this class simple does is allow you to check the response / return value of a function to ensure the correct data type is returned, otherwise it throws an exception.

Please review my test script below and tell me what you think?
Im sure if this was placed in the core the actual syntax of the call could be shortend to something like return('string', '1234'); or similar.


Test script:
---------------
<?php

class Check {

	/* description
	 * This class is used to check function return types *

	/* usage */
	//return Check::type('string', $data);

	/* supported return types
	is_array
	is_​bool
	is_​callable
	is_​double
	is_​float
	is_​int
	is_​integer
	is_​long
	is_​null
	is_​numeric
	is_​object
	is_​real
	is_​resource
	is_​scalar
	is_​string 
	*/

	//set allowed return types
	public static $types = array('array','bool','callable','double','float','int','integer','long','null','numeric','object','real','resource','scalar','string');


	//check return type
	public static function type($type, $value, $allowNull = false) {
		
		//check an allowed type is selected
		if(!in_array($type, self::$types)) {
			throw new Exception('return type not listed');
		}

		//check for $allowNull / empty values
		if($allowNull == true) {
			if($value == null || $value == false || $value == '') {
				return $value;
			}
		}

		//prepare method name used to check
		$function = 'is_'.$type;

		//check return type
		if(!$function($value)) {self::error($type, $value);}

		//return value
		return $value;
	}

	//throw generic error for failed return type
	public static function error($type = '', $value = '') {
		$backtrace = debug_backtrace();
		$error  = 'failed method return type found in '.$backtrace[0]['file'].' at line '.$backtrace[0]['line'].' ';
		$error .= 'return type expected: '.$type.' - ';
		$error .= 'actual type returned: '.gettype($value).' - ';
		$error .= 'containing: '.json_encode($value);
   		throw new Exception($error);
	}

}


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2014-05-05 14:57 UTC] johannes@php.net
-Status: Open +Status: Not a bug
 [2014-05-05 14:57 UTC] johannes@php.net
Return type handling is discussed as part of this RFC: https://wiki.php.net/rfc/returntypehinting

No need for extra bug tracker item.
 
PHP Copyright © 2001-2021 The PHP Group
All rights reserved.
Last updated: Sat May 08 05:01:23 2021 UTC