summaryrefslogtreecommitdiff
path: root/trunk/Examples/php/overloading
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/Examples/php/overloading')
-rw-r--r--trunk/Examples/php/overloading/Makefile24
-rw-r--r--trunk/Examples/php/overloading/example.cxx55
-rw-r--r--trunk/Examples/php/overloading/example.h46
-rw-r--r--trunk/Examples/php/overloading/example.i8
-rw-r--r--trunk/Examples/php/overloading/runme.php59
5 files changed, 192 insertions, 0 deletions
diff --git a/trunk/Examples/php/overloading/Makefile b/trunk/Examples/php/overloading/Makefile
new file mode 100644
index 000000000..1bc0beaab
--- /dev/null
+++ b/trunk/Examples/php/overloading/Makefile
@@ -0,0 +1,24 @@
+TOP = ../..
+SWIG = $(TOP)/../preinst-swig
+CXXSRCS = example.cxx
+TARGET = example
+INTERFACE = example.i
+LIBS =
+SWIGOPT =
+
+all::
+ $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
+ SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' \
+ php_cpp
+
+static::
+ $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \
+ SWIGOPT='$(SWIGOPT)' TARGET='myphp' INTERFACE='$(INTERFACE)' \
+ php_cpp_static
+
+clean::
+ $(MAKE) -f $(TOP)/Makefile php_clean
+ rm -f $(TARGET).php
+
+check: all
+ $(MAKE) -f $(TOP)/Makefile php_run
diff --git a/trunk/Examples/php/overloading/example.cxx b/trunk/Examples/php/overloading/example.cxx
new file mode 100644
index 000000000..2f684f05c
--- /dev/null
+++ b/trunk/Examples/php/overloading/example.cxx
@@ -0,0 +1,55 @@
+/* File : example.c */
+
+#include "example.h"
+#include <math.h>
+#ifndef M_PI
+# define M_PI 3.14159265358979323846
+#endif
+
+int Shape::get_nshapes() {
+ return nshapes;
+}
+
+/* Move the shape to a new location */
+void Shape::move(double dx, double dy) {
+ x += dx;
+ y += dy;
+}
+
+int Shape::nshapes = 0;
+
+double Circle::area(void) {
+ return M_PI*radius*radius;
+}
+
+double Circle::perimeter(void) {
+ return 2*M_PI*radius;
+}
+
+double Square::area(void) {
+ return width*width;
+}
+
+double Square::perimeter(void) {
+ return 4*width;
+}
+
+const char *overloaded(int i) {
+ return "Overloaded with int";
+}
+
+const char *overloaded(double d) {
+ return "Overloaded with double";
+}
+
+const char *overloaded(const char * str) {
+ return "Overloaded with char *";
+}
+
+const char *overloaded( const Circle& ) {
+ return "Overloaded with Circle";
+}
+
+const char *overloaded( const Shape& ) {
+ return "Overloaded with Shape";
+}
diff --git a/trunk/Examples/php/overloading/example.h b/trunk/Examples/php/overloading/example.h
new file mode 100644
index 000000000..01d71dd70
--- /dev/null
+++ b/trunk/Examples/php/overloading/example.h
@@ -0,0 +1,46 @@
+/* File : example.h */
+
+#include <stdio.h>
+
+class Shape {
+public:
+ Shape() {
+ nshapes++;
+ }
+ virtual ~Shape() {
+ nshapes--;
+ }
+ double x, y;
+ void move(double dx, double dy);
+ virtual double area(void) = 0;
+ virtual double perimeter(void) = 0;
+ static int nshapes;
+ static int get_nshapes();
+};
+
+class Circle : public Shape {
+private:
+ double radius;
+public:
+ Circle(double r) : radius(r) { }
+ ~Circle() { }
+ virtual double area(void);
+ virtual double perimeter(void);
+};
+
+class Square : public Shape {
+private:
+ double width;
+public:
+ Square(double w) : width(w) { }
+ ~Square() { }
+ virtual double area(void);
+ virtual double perimeter(void);
+};
+
+const char *overloaded( int i );
+const char *overloaded( double d );
+const char *overloaded( const char * str );
+const char *overloaded( const Circle& );
+const char *overloaded( const Shape& );
+
diff --git a/trunk/Examples/php/overloading/example.i b/trunk/Examples/php/overloading/example.i
new file mode 100644
index 000000000..950d2549d
--- /dev/null
+++ b/trunk/Examples/php/overloading/example.i
@@ -0,0 +1,8 @@
+/* File : example.i */
+%module example
+
+%{
+#include "example.h"
+%}
+
+%include "example.h"
diff --git a/trunk/Examples/php/overloading/runme.php b/trunk/Examples/php/overloading/runme.php
new file mode 100644
index 000000000..01044445f
--- /dev/null
+++ b/trunk/Examples/php/overloading/runme.php
@@ -0,0 +1,59 @@
+<?php
+
+# This file illustrates the low-level C++ interface
+# created by SWIG. In this case, all of our C++ classes
+# get converted into function calls.
+
+include("example.php");
+
+# ----- Object creation -----
+
+print "Creating some objects:\n";
+$c = new Circle(10);
+print " Created circle \$c\n";
+$s = new Square(10);
+print " Created square \$s\n";
+
+# ----- Access a static member -----
+
+print "\nA total of " . Shape::nshapes() . " shapes were created\n";
+
+# ----- Member data access -----
+
+# Set the location of the object.
+# Note: methods in the base class Shape are used since
+# x and y are defined there.
+
+$c->x = 20;
+$c->y = 30;
+$s->x = -10;
+$s->y = 5;
+
+print "\nHere is their current position:\n";
+print " Circle = (" . $c->x . "," . $c->y . ")\n";
+print " Square = (" . $s->x . "," . $s->y . ")\n";
+
+# ----- Call some methods -----
+
+print "\nHere are some properties of the shapes:\n";
+foreach (array(1, 2.1, "quick brown fox", $c, $s) as $o) {
+ print " ".get_class($o)." \$o\n";
+ print " overloaded = " . overloaded($o) . "\n";
+ }
+
+# Need to unset($o) or else we hang on to a reference to the Square object.
+unset($o);
+
+# ----- Delete everything -----
+
+print "\nGuess I'll clean up now\n";
+
+# Note: this invokes the virtual destructor
+unset($c);
+$s = 42;
+
+print Shape::nshapes() . " shapes remain\n";
+
+print "Goodbye\n";
+
+?>