Archive for February, 2008|Monthly archive page
How to create a Class
It’s three articles (1 2) now, it’s almost a book! Here’s how to create a class in my three favorite languages:
PHP
Method 1: standard
The advantage of this method is it’s obvious portability to other (e.g. compiled) languages. If you add getters and setters the link to java is easily made.
class Cube {
var $colors;
var $size;
var $brand;
}
$c->colors = 'red,green,blue,yellow,white,orange';
$c->size = 4;
$c->brand = 'rubiks';
foreach (get_object_vars($c) as $property=>$value)
print_r($property . ' = ' . $value . ', ');
?>
Method 2: instant class
The advantage of this method is the fact that properties (any method or attribute) can me created on the fly, even using variables, e.g. ‘price’, ‘new’ . ‘price’ or even ‘new’ . ‘price’ . $date. So in the example below we are defining the class, but not even giving it any properties (though it could have some of course).
class Cube {}
$c = new Cube;
$prop = $colors;
$c->$prop = 'red,green,blue,yellow,white,orange';
$prop = 'size';
$c->$prop = 4;
$prop = 'brand';
$c->$prop = 'rubiks';
foreach (get_object_vars($c) as $property=>$value)
print_r($property . ' = ' . $value . '
');
?>
Method 3: instant object
The advantage of this method is that the object doesn’t actually have a class. Because of that properties can be invented at will, and they don’t have to be variables, shortening the code to a form that looks like the class actually was defined. Be careful with this though, other people who read your code will frantically look for the class definition and won’t find it if they don’t know about the use of stdClass. An equivalent, but not as nice looking, is to cast null to an object, as in “$c = (object) null;”
$c = new stdClass(); $c->colors = 'red,green,blue,yellow,white,orange'; $c->size = 4; $c->brand = 'rubiks'; foreach (get_object_vars($c) as $property=>$value) print_r($property . ' = ' . $value . ' '); ?>
JavaScript
In javascript there are plenty of possibilities for creating objects. Classes however do not exist (not in a practical sense anyway). Any object you create is a ‘class’ in itself, and can be copied or extended on the fly.
Note how javascript’s for..in actually iterates over all property names (not the values as you might expect).
var c = new Object; c.colors = 'red,green,blue,yellow,white,orange'; c.size = 4; c.brand = 'rubiks'; for (property in c) alert(property + "=" + c[property]);
Though it is correct that arrays and functions are both objects, and it seems an easy way of providing php’s foreach construct, the for..in is not suitable for this. An array with 10 elements, with index 0..9 cannot be iterated this way, since the array is also a ‘Class’ and all its properties, e.g. the length property, will also be iterated. In the example below, if we added a method ’show’, we would see the definition of the function, converted to a string. That’s right, the full source code of the method.
r = Array('red','green','blue');
r.show = function() { alert(this); }
for (property in r)
alert(property + "=" + r[property]);
(Visual) Basic
I will not consider VB.Net, since in .NET every program is object oriented (supposedly) and thus classes are at the base of the language. Anyway, it’s not more difficult than choosing “add item > class”, and almost all the code is created for you.
In Visual Basic it gets more interesting, since it’s not an OO language in itself. Again, just like in JavaScript, objects are more considered ‘containers for variables and functions’. The concept of subclassing does not exist in VB. OK, here it goes. I am assuming you have created a Standard Exe project. First, choose Project > Add Class Module. You’ll see a new module created named ‘Class1′. You can just rename that in the properties pane to Cube. Now add the code:
' method 1: public members Public colors As String Public size As Integer Public brand As String
This is not the preferred way, we should actually create getters and setters for these. This is easy using Tools > Add Procedure. Name it colors e.g. and you will get the following code
Public Property Get colors() As Variant End Property Public Property Let colors(ByVal vNewValue As Variant) End Property
To this you’d still have to add a private variable, such as m_colors, which would be used in your Get and Let methods. You can create a new Cube object from within a form or a module using “set c=new Cube”.
In VBA (Visual Basic for Applications) the procedure is exactly the same, though you don’t have to create a new executable. You can start by e.g. pressing ALT+F11 in Excel and you will be able to add a class module.
Finally, in VBScript you could either create a class definition as in VB (without the type names though)… or use the ExecuteGlobal method to evaluate code and, again, generate classes on the fly.
a very useful WordPress plugin to include stuff in pages
-
This sounds biochemical, but it’s really just a simple addon to WordPress to add post and page variables to your articles (and combine, recombine and program a little too)
-
This could be handy. TinyMCE always annoyingly wants to change things.
Contact Form WordPress Plugins
-
until I make my own I will use Mike’s
some oosefool mootools goodies
-
maybe someday I will rewrite my own tree to use this
-
maybe I can adapt this one as a ‘windowing’ tool
fancyupload – A cool flash uploader with progress bar
-
a very nice upload, very nice indeed.
How to find out if a variable has been defined
It’s two articles now, it must be a series! Here’s how to find the out if a variable has been defined in my three favorite languages:
PHP
/* v has not been declared */ if (isset($v)) echo "v has been defined"; else echo "v has _not_ been defined";
JavaScript
Please note that in javascript a runtime error would be generated when trying to access a variable that has not been defined. However, any variable that you create will automatically become a property of the window object. Therefor, checking if the variable has been added to the scope of window will result in a condition that can be checked. Also note that this will only work in a browser, which of course is how most people experience javascript anyway.
As an example: “window.doesnotexist==null” results in true. Be careful not to overwrite stuff that already does exist in the window.
/* v has not been declared */
if (window.v)
alert("v has been defined");
else
alert("v has _not_ been defined");
(Visual) Basic
In Visual Basic you will only be able to use this code if “option explicit” is off, meaning in VBScript, VBA and VB6.0 there should not be a line on the top which says “Option Explicit”. In the .NET environment there is a setting for this in the options dialog (project properties). In the case Option Explicit is on, variables will always be assigned a default value, so you can never check e.g. if an integer variable has been assigned a value of 0.
You can either check using the typename function or using the isEmpty function.
As an example: Debug.Print TypeName(doesnotexist)=”Empty” shows True
if isempty(v) then debug.print "v has been defined" else debug.print "v has _not_ been defined" end if
How to base64 encode in javascript
Design For the Other 90% | Cooper-Hewitt, National Design Museum
-
awesome ideas, all in the category “why didn’t I think of that?”
Joran’s confession
He isn’t lying this time, I am convinced
Leave a Comment
Leave a Comment
Leave a Comment
