Title:           Loose type requirements for functions
Version:         $Id: 44b1c3dc4e55051df8198e280ec3e54d6c3d0983 $
Status:          draft
Maintainer:      Brian Moon <brianm@dealnews.com>
Created:         2001-09-17
Modified:        2001-09-17


1. Background/Need
==================

Many internal functions of PHP will reject parameters because of their
type (the array and variable function come to mind).  For userland
this is not an easy task as there is no uniform way to do it.  An
addition to the engine for requiring loose types would allow
developers to know that the data passed to their functions are of the
correct type and reduce the need for duplicating the same code in
every function to check for the type of data.


2. Overview
===========

Loose typing mostly means evaluating the contents of the variable and
not the type of the variable itself.  The requirements for this would
and should work much like several of the is_* functions do now.

The typing of parameters would be optional and those not typed would
simply continue to be treated as they are now.

3. Functionality
================

3.1. Allowed Types
==================

Only loose types should be needed to ensure the data is usable by the
function.  Duplicating the functionallity of is_scalar, is_resource,
is_array and is_object should give developers all the information they
need to use a variable correctly.

3.2. Syntax
===========

The current function syntax should be expanded to allow typing of
variables inline in a C style.

function foo ($var){
}

could be changed to require an array such as:

function foo (array $var){
}

3.3. Errors
===========

Mis-matches in type should be reported as fatal errors and should halt
the execution of a script as that function cannot be run and code
following could not reliably run.


4. Compatibility Notes
======================

Old code that does not take advantage of this will run without
modifications.
