These create the inputs for forms and create output as html or text. Basic ones are like simple html form inputs, advanced ones can parse or massage the data.

They can create a blank (or default value) html form input for a new record, or edit the data coming back from the database.

Given the POST from that submitted form and an InsertObject, they can parse and add their insertions to the $io to be inserted into the database.

They can take a QueryObject to select the fields they need from the database for display.

They are then passed an array of data coming from the database, and can format the display. text, dates, pictures, wikipages etc.

They are used in tables of results (using ResultSet ) and can also be used to sort the $qo if their column was clicked on.

They protect against breakage by ' and " etc. in form fields. They are magic quotes aware. O'reillys do not break them when he comes back to edit his name.

They can format numbers and unformat them when updating.

they are easily subclassable to gain great power and flexibility of inputs and displays.
custom classes can handle strange application specific situations.
eg. multiple drop downs for a Date selector
select inputs that look up in the db to load their options
Picture that handles all uploading, resizing and then saves the path name to the db.
(a PictureBlob could put the picture directly in the db if you like)
objects that display different things depending on user permissions

table is the database table
field is the database field
caption is the title that will appear in the display,
though this class doesn't handle that display,
this data is used by display functions to do that
alias is the html form field name
usually the same as the database field, but sometimes not.
eg. you have two fields named 'name' in two diff tables
new RawText("person"," as personName","Person's Name","personName")
new RawText("dog"," as dogName","Dog's Name","dogName")
attributes are html attributes
either in the field itself ( input type=text $attributes )
or the td presenting it

InputObjects can also join tables, a very useful technique.