diff options
Diffstat (limited to 'Examples/php/class')
-rw-r--r-- | Examples/php/class/Makefile | 24 | ||||
-rw-r--r-- | Examples/php/class/example.cxx | 39 | ||||
-rw-r--r-- | Examples/php/class/example.h | 38 | ||||
-rw-r--r-- | Examples/php/class/example.i | 10 | ||||
-rw-r--r-- | Examples/php/class/runme.php | 60 |
5 files changed, 171 insertions, 0 deletions
diff --git a/Examples/php/class/Makefile b/Examples/php/class/Makefile new file mode 100644 index 0000000..1bc0bea --- /dev/null +++ b/Examples/php/class/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/Examples/php/class/example.cxx b/Examples/php/class/example.cxx new file mode 100644 index 0000000..f171f10 --- /dev/null +++ b/Examples/php/class/example.cxx @@ -0,0 +1,39 @@ +/* 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; + +void Circle::set_radius( double r ) { + radius = r; +} + +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; +} diff --git a/Examples/php/class/example.h b/Examples/php/class/example.h new file mode 100644 index 0000000..02eaf72 --- /dev/null +++ b/Examples/php/class/example.h @@ -0,0 +1,38 @@ +/* File : example.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() { } + void set_radius( double r ); + 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); +}; diff --git a/Examples/php/class/example.i b/Examples/php/class/example.i new file mode 100644 index 0000000..75700b3 --- /dev/null +++ b/Examples/php/class/example.i @@ -0,0 +1,10 @@ +/* File : example.i */ +%module example + +%{ +#include "example.h" +%} + +/* Let's just grab the original header file here */ +%include "example.h" + diff --git a/Examples/php/class/runme.php b/Examples/php/class/runme.php new file mode 100644 index 0000000..12b6860 --- /dev/null +++ b/Examples/php/class/runme.php @@ -0,0 +1,60 @@ +<?php + +# This example illustrates how member variables are wrapped. + +require("example.php"); + +# ----- Object creation ----- + +print "Creating some objects:\n"; +$c = new Circle(10); +print " Created circle\n"; +$s = new Square(10); +print " Created square\n"; + +# ----- Access a static member ----- + +print "\nA total of " . Shape::get_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 ----- + +# Notice how the Shape_area() and Shape_perimeter() functions really +# invoke the appropriate virtual method on each object. +print "\nHere are some properties of the shapes:\n"; +foreach (array($c,$s) as $o) { + print " ". get_class($o) . "\n"; + print " area = {$o->area()}\n"; + print " perimeter = {$o->perimeter()}\n"; +} + +# ----- Delete everything ----- + +print "\nGuess I'll clean up now\n"; + +# Note: this invokes the virtual destructor +$c = NULL; +$s = NULL; + +# and don't forget the $o from the for loop above. It still refers to +# the square. +$o = NULL; + +print Shape::get_nshapes() . " shapes remain\n"; +print "Goodbye\n"; + +?> |