Don't repeat yourself.
Kjell Gunnar Bleivik Januar 13 2016.
Status: will be updated with additional information.
That is what objectoriented programming (OOP) is about.
Code reuse is fundamental in OOP. There are some C++ examples of OOP on our old forum worth studying. DRY, don't repeat yourself is automatically implemented in a good OOP design. OOP started with Simula in Norway in the 1960's since the formal programming concept of objects was introduced in Simula 67. According to the first Wikipedia article some claimed that it started earlier, at M.I.T. in the late 1950s. That is not the main topic of this short article and has been extensively discussed elsewhere. Some Norwegians get religious when LISP is mentioned, others when Simula is mentioned. Objects, polymorphism and (multiple) inheritance, was that formalized before it was done in Simula? I have my glasses and you who read this short article yours, so I stop with this discussion.
I have been on a 4 hour seminar with one of the language's inventors, Kristen Nygaard.
Kristen Nygaard (August 27, 1926 – August 10, 2002) is internationally acknowledged as the co-inventor with Ole-Johan Dahl of object-oriented programming and the programming language Simula. He also was a pioneer of participatory design and the “Scandinavian school of systems development”.
All the major aspects of the object-oriented programming paradigm. including class, subclass, inheritance, dynamic object creation, etc., originated with Simula. This paradigm has led to fundamental changes in how information systems are designed, resulting in reusable, reliable, scalable systems. Today, object-oriented programming languages are widely used in programming diverse software systems ranging from large-scale distributed systems to small, personal applications.
Kristen is also the co-creator of other important modelling and computer programming languages, including Delta (with Petter Håndlykken and Erik Holbæk-Hansen), and Beta (with Bent Bruun Kristensen, Ole Lehrmann Madsen and Birger Møller-Pedersen).
That was an interesting experience, and I have seen how Norwegian programmers get religious when they talk about programming languages. Some of them hate server scripting languages like php and client (browser) scripting languages like JavaScript. If you go for the perfect, you will often end up with something imperfect. Sometimes good enough is best. Design patterns that is in a sense generalized objects take OOP to a new level. If you are interested in religion, you can read about it in the book Learn design patterns with BETA that Kristen Nygaard coauthored.
HTML, php and php include
You may hate php. I don't care as long as php functions and helps me in writing content on the internet. Php is extremely flexible, and it can be used in (mixed with) HTML tagging. As an example, all the text I produce on this site in 2016 is included in its own text file with an php extension. I can use php much more advanced than that, and it helps me reuse included code.
Drupal 8 is OO
Drupal 8 has recently been launched and it is responsive and object oriented. Drupal multi site installation is straightforward. Multiple sites can share the same code and design. If you want different designs for the various sites that share the code, that is possible. This is effective reuse of code and design. Some companies offer click installation of CMS systems like drupal and WordPress and bulletin boards like phpBB. If you know how to install and use drush (drupal shell) and PuTTY, you handle the monster code (more than 13 000 files) of drupal 8 on the web like you handle the same file system on your workstation or on a Surface Pro tablet. If your hoster offer a good file manager in the cPanel of your site, you can upload this code in less than a minute to your web server. You upload the zip file, unpack it and move the files to the correct folder if it is not already there. The same zip file can of course be unpacked to more than one domain, but that is not effective code use. It is more efficient (minimalistic) to reuse the (core) code on a multi site installation. Your sites get more vulnerable to hacking, so it is of utmost importance that you have good backup systems and a secure cPanel service for your domains.
One single password and login for a site network
I want to create a network of blog sites and forums where users will use the same username and password across all sites and forums. I am hoping I can acheive this with Wordpress MultiSite, phpBB3 and a phpbb3 bridge, for single signon authentication.
Source: Wordpress MultiSite with phpbb3 Sub Forums
Your needs may be more advanced. You may want to have one single login for your CMS sites like drupal, WordPress and your bulletin boards like phpBB and even your native coded sites. How shall you code that in OOP? Idiotic question will the religious say. How shall you generally code that? If you use php as your server scripting language, it should not be difficult if every (multi site installed) site has its own code and database, to write the code (class or pattern). It should not be difficult to write a network login code (or class) for the specific login method you want. For a more secure registration and login, you can use FaceBook, LinkedIn and other social media login plugins that can be combined with your own login method (class) that is most often more vulnerable for hacks and spammers. Very few people will risk being banned by their social media service provider. I have not tried to write this code myself, since I have not needed it.
Minimalism in 2016. Installing drupal 8 an example.
Drupal 8 is huge. In a sense it is a monster. Drupal 8.0 contains more than 13 000 files that I installed using Dreamweaver's Ftp that is reasonably fast. That took hours and since I am on a shared host, I got problems. If you search on the internet or on the drupal site you may note that there may be problems installing drupal 8 on a shared server. My hoster A2hosting has a great filemanager. This filemanager is as good and fast as the filemanager on my workstation, a dell with 32 Gb ram and Windows 10. I deleted the old version that did not function. Then I uploaded the drupal 8.02 zip file and unpacked it on the web server. The whole process took less than a minute. But I still got problems installing drupal 8, so I had to use A2Hosting's click and install package Softaculous Apps installer for drupal that is available in my cPanel. I chose the last version, 8.02, filled out the required form, and clicked install. Wow, it took less than a minute, with the following message:
And I also got an email that started like: Hello,Congratulations, the software was installed successfully
Drupal has been successfully installed at :
Drupal 8.0.2 has been installed to your A2 Hosting account by the Softaculous auto-installer.
To customize and configure your Drupal installation you can log into the Drupal control panel. Your admin login information is below:
Cron Job : wget -O - -q -t 1
You will be notified by email at *** about new versions of Drupal when they are available. Updating your installation to the latest version is a good security measure as vulnerabilities may be corrected in newer versions.
If you wish to make any changes to this installation, install more applications or uninstall any applications, you can use Softaculous in the Software/Services section of the cPanel control panel. Access information can be found in your Welcome Email.
The detailed information below will not be used in most cases but is included here because it may be needed for advanced configuration or support.
Note what I have bolded above, Cron Job : wget -O - -q -t 1. That is excellent since I can specify how I want to set up the cron job or choose the default. Setting up the cron job manually takes time. In the Softaculous Software/Services section of the cPanel control panel, I have the options to delete, edit or back up the installation. Drupal 8 can create the database itself, so I even did not create an empty database. The Softaculous Apps installer created the database for me.
Related links.
- Andrea Chiarelli (July 2016): Mastering JavaScript Object-Oriented Programming
- W3Schools | JavaScript Closures
- Sitepoint | JavaScript Closures Demystified
- Sitepoint | Preparing for ECMAScript 6: Map and WeakMap
- Sitepoint | Object-Oriented JavaScript — A Deep Dive into ES6 Classes
- ECMAScript 6 — New Features: Overview & Comparison
- Ecma International
- Softaculous is the leading Auto Installer for cPanel, Plesk, DirectAdmin, InterWorx, H-Sphere. It has 384 great scripts
- phpbb.com | Webste + Multiple phpBB Boards
- phpbb.com | Quick install / multi-site
- Sitepoint | The End of Passwords or Privacy? It’s Your Call
What happened to php 6? Php 7, the latest version of php!
- PHP 7.0.0 RC 7 Released
- 30-June-2009 PHP 5.3.0 Released
- See the release announcement for further details.
- Full list of changes is available in the ChangeLog.
- What's new in PHP 5.3?
- Safe Mode
- Persistent Database Connections
- Is PHP a powerful tool?
Putting professional PHP 6 code on the web::: An example.
C++ Builder 2009 Professional::: Getting started PDF download.
C++ Builder 2010 Professional::: Getting started PDF download.
Related links
- Touch The Future with RAD Studio 2010!
- RAD Studio 2010 Touch Gesture Capabilities | Delphi & C++
- Delphi and C++Builder 2010 Touch/Gesture blog posts and videos
- Embarcadero's home page.
- Smarty
Before you start on your project, use and fill out the following three cards that shall be continually updated: Yellow User (Client) story card, with Date: Story/Number: Description: Estimate Blue Engineering Task Card, with Date: Story/Number: Software engineer: Task estimate: Task description: Green Class card, with Responsibility: Collaboration: Some great online resources for your project: UML Extreme Programming Refactoring JUnit testing PhpUnitTesting Sebastian Bergmann PHPUnit.de Download PHPUnit Unit Testing with PHP githubde Agile Software Development: A gentle introduction Finally ask yourself. Can I use external server scripting libraries like: pear in my project? Can I use external client scripting libraries like: jQuery in my project? Can I use design patterns? Finally: Program to an interface and not to an implementation. books and resources Professional PHP 6 |
Kjell Gunnar Bleivik 05.07.2009::: Computing or drawing?
Today, French-Russian mathematician Gromov won the Abel prize for his contribution to differential geometry, curved, that is nonlinear spaces and shapes. Very little in nature is linear. A cloud is non linear. Shapes and curves you draw with your finger on a touchscreen is also nonlinear. Can these curves generate code? Can you build programs by touching a screen with your finger or a pen?
Generalization lifts computing to a more abstract, but at the same time also to a more practical level. If you have read the above PDF document, you would have noted that computing is in a sense reduced to dropping components on a form. Patterns generalizes classes and components generalizes patterns. The next step in the evolution of programming may combine
- Touch screen,
- net clouds
- and component dropping on a form or another graphical object.
- Pointing finger or programming::: The future of computing.
- The mobile revolution.
- Computing::: Grid and cloud.
- The desktop is on the web.
- C++ Web programming::: Porting desktop applications to the web.
- Misha GROMOV
- The Abel Prize.
- Programming Languages: Managed versus Native
From object oriented programming, via design patterns, components and abstract visual programming.
This site will focus on good OOP practice in the tradition of Simula and BETA. In BETA, "everything" is a pattern. Patterns are now also fully integrated into PHP and ajaxpatterns and principles are maturing. Patterns are also being introduced in JavaScript. The Yahoo JavaScript Module Pattern is an exellent example of a very useful pattern if you use the Yahoo user interface. There are no class concept in JavaScript, but you can simulate class functionality. I wrote a post at WPW about a soft introduction to object oriented programming that starts with JavaScript. That is a good starting point, even though you may be confused by the many links.
You do not wear a sewing pattern. On a modern sewing machine, a mini computer, you may use a lot of predefined patterns. You do not wear a pattern. You wear cloths. Jason E. Sweet defines it like this in the first book on design patterns in PHP.
Design patterns are a template for how to organize your code, so you can take advantage of a tried-and-true design.
JavaScripting has get a renewed status with the emergence of new technologies like XHR and AJAX. Here are some resources on DOM building and DOM Scripting in addition to those on the toolbar and on DigitalStart.net.
- Firebug: An invaluable debugging tool for the FireFox: web browser and much more.
- From DHTML to DOM scripting
- Dev Shed: Dynamic HTML Developer
- Beginning JavaScript
- DOMscripting
- OnlineTools
With firebug, you can debug your web pages in real time and look at the code of other websites that are driven by JavaScript. There is an thought provoking article "Monkeypatching is Destroying Ruby"
""Monkey patching", for anyone who doesnt know, refers to the practice of extending or modifying existing code by changing classes at run-time. It is a powerful technique that has become popular in the Ruby community at least in part because the Ruby language makes it so easy. Any class can be re-opened at any time and amended in any way".
Since PHP is becoming more and more a true object oriented program, the site will also foccus on PHP, since PHP is good enough for a lot of web programming tasks like delivering web services. If you are used to writing HTML and designing in CSS, PHP is also a natural next step in your learning cycle. If you combine PHP with a simple database as e.g. MySQL you are also able to make your own content management system and develope proffessional databasedriven ecommerce sites. If the only tool you have is a hammer, everything soon starts to look like a nail. Use the simplest (and most efficient) technique to solve a specfic problem.Use the simplest (and most efficient) technique to solve a specfic problem.
When ( if) you (already) understand JavaScript and JavaScript Objects, the natural next step is to learn PHP. PHP is a powerful language that support the most important database plattforms as MySQL, PostgreSQL, Oracle, Sybase and MS SQL server. As an example, consider you have a database connection class for MySQL and PostgreSQL. Both share a common method (API), query. Then you may use the same code on different database servers. I can also highly recommend the Sitepoint book: "Build your own AJAX Web Applications." That is another soft introduction to object oriented programming where you learn a lot of technologies in addition to developing your own web applications. In addition it has explicite sections on how you shall make accessible web applications for disabled users. The idea is to show content for people with disabilities using simple CSS stylesheets and hide that content for able users. Excellent book where you learn much.
In the mide 1990's I wrote some fairly advanced classes that you find in the C++ subforum on on the old version of ForumNorway. Some of the code examples illustrate the use of templates and are fairly compact. The code is well documented and may be worth a study if you are writing template based code and generics in C++.
The concept of object oriented programming (OOP) has been used and misused in various connections. A lot of programming languages claim to be object oriented. Abstraction is a central element in OOP. Four basic principles defines the object oriented approach to abstraction. These are:
- data abstraction
- behaviour sharing
- evolution and
- correctness
These are the same as used in what we will call a classic book on OOP, Blair et. al. (1991) page 6. When you have read the first 5 chapters of this book, you will have understood that it is meaningless to try to define object oriented programming. Instead a design space for OOP is constructed along four dimensions
- Polymorphism (flexible sharing).
- Encapsulation
- Classification
- Interpretation
This framework bridges the gap between OOP principles and OOP technologies.
Note that there are alternatives to classes like actors and prototypes. Class based OO languages emphasize structural abstraction. Actor languages are primarily concerned with the communication structure of interacting process. Actors are basically computational agents that communicate via delegation. This is a more flexible form for behaviour sharing than inheritance. Each object or prototype defines its own type.
Binding is very important in OOP. There is a difference between dynamic and static binding. C++ code are for instance compiled, while PHP is a preprocessor or interpreter. Interpreted code is more flexible. Think of compiled code as a fixed table in memory. Interpreted code may be thought of as a more flexible space in memory that lives when the application is run. PHP is a loosely typed language and in version 5 it has become more OO. So go for PHP 5.0 and above.
Before you start with PHP, you should read the PHP License.
It has been said that the PHP manual can be read as a book. Here is the manual, some important chapters and other resources:- How to change configuration settings Don't get lost in the forest and make your code portable
- Reserved variables E.G. $_SERVER tells you a lot about your webserver, like $_SERVER['DOCUMENT_ROOT']. Important to know that to configure your system properly.
- Execution Operators
- PHP Security
- Heredoc syntax
- The devil is in the details
- PHP Manaul Do not shoot sparrows with cannons. Know your toolbox(es).
- Predefined variables You should know all of these and what they can do for you. They are important in any dynamic site where you need user interaction etc.
- Arrays Using structure on your site folders, include files and arrays you do not always need a database. Example large image and / or movie files are better stored in (secure folders, even on a different server) than in a database. Large files in a database reduce the efficiency of your program. If you need a database, store the name in the database if possible and the file in a folder.
- Scope Know where you are. Super global scope is different from function and class scope.
- Constants Define constants at the top of your file. Do not use variables when something is constant.
- PHP Data Objects (PDO) extension functions
- PDO: Package information
- Classes and Objects (PHP 4)
- Classes and Objects (PHP 5)
- Overloading Classes in PHP 5
- New Object Model
- Sitepoint.com: Advanced PHP Resources
- Using Inheritance, Polymorphism and Serialization with PHP Classes
- Reccomended books on OOP in PHP 5
- PHP Essential Training
- PHP History
- Finally name spaces
- Features coming in PHP
- PHP6- Direction of PHP
- Learn-php-tutorial
- php-video-tutorial
- PHP/MySQL Tutorial
- Zend PHP Tutorials
- Mesh PHP Developement and integration.
- A help desk application using the Zend framework
- Smarty template engine
- SQLite
- Devarticles: PHP
- Quick E-Commerce with PHP and PayPal
- SitePoint: Recent Articles
- SitePoint: Before you code
- Sitepoint: Newsletter Archives
- PHP-GTK
- Autoloading Objects
- Q & A about Zend Engine II and PHP 5.
- PHP/CURL -- using libcurl with PHP
- PEAR and PECL InfoCenter
- PHP Articles at Zend
- php sessions for storing data
- Book review: Head First Design Patterns
- Build Your Own Database Driven Website Using PHP & MySQL
- Object Oriented PHP: Paging Result Sets
- Object Oriented Programming in PHP: The Way to Large PHP Projects
- Building a Generic Model for the CodeIgniter PHP Framework
- PHP Articles at Zend
- PHP Design Patterns
- Stefan Gabos php scrips, php snippets, php classes, php tutorials, php related news
pear: PHP Extension and Application Repository
- What is PEAR?
- Stig Bakken: pear's creator
- pear Symfony
- pear PHPUnit
- pear Developers
- Stig Bakken et al: PHP 5 Power Programming. Free eBook
- pear forum
- Codewalkers PHP related forums
- Go-pear: The PEAR package installer (Note: PEAR is distributed with XAMPP). So you can make a web test server on your laptop in minutes.
- PEAR: Manual
- pear manual: Online 2009 version
- pear: Installation
- pear: Web installer
- Installation of a local PEAR copy on a shared host
- pear: Installing packages
- pear: Command line installer
- Getting started with PEAR
- PEAR Tutorials
- PEAR: Channels
- The design of a Robust Persistence Layer for Relational Databases
- PEAR MDB2: Package Information Do I really need to write SQL?
- PEAR Packages
- PEAR Package Information: File
- PEAR HTML_QuickForm. Getting started Guide.
- XML and Webservices With PHP5 and-PEAR
You can get a flying start by downloading and installing XAMPP for Windows or Linux. XAMPP is an easy to install Apache distribution. The distribution for Windows 98, NT, 2000 and XP. XAMPP version 1.5.2 contains: Apache, MySQL, PHP + PEAR, Perl, mod_php, mod_perl, mod_ssl, OpenSSL, phpMyAdmin, Webalizer, Mercury Mail Transport System for Win32 and NetWare Systems v3.32, JpGraph, FileZilla FTP Server, mcrypt, eAccelerator, SQLite, and WEB-DAV + mod_auth_mysql. I downloaded and installed the package in 5 minutes. Then you have your own (test) webserver (do not put it on the web without configuring it since the default installation is open to everybody with a browser), database server and PHP plattform. Use it as a testserver. Now you have an excellent plattform to learn OOP in PHP. You can cut the connection to the internet and make and test advanced database driven content management systems (CMS) before you put them on the web.
PHP Web Services
Note, the need to use Web services has decreased with PHP 5 and above. Often it is enough to use simplexml functions. The SimpleXML extension requires PHP 5.x and is enabled by default. According to Robert Richards (2006) page 492, it appears that PEAR will not be included with a default installation of PHP 6. You mus manually install the PEAR core and installer. Also note that those new to XML often run into problems when dealing with documents not based on the ANSI encoding or the UTF-9 encoding. Basinc knowledge of Unicode is highly suggested, because you will need to understand what it means for a string to be encoded and why it is important to know what encoding is used. The libxml2 library supports a few additional encodings natively and when built with iconv support, it can support all encodings supported by iconv. Note that XML documents are internally stored used UTF-8encoding. Interactin with XML data in those cases must be performed using UTF-8 encoding. For these reasons, properly declaring your XML document and using the correct encoding is important. Also note that the X in AJAX stand for XML, so understanting the XML family of technologies becomes more and more important and some mean that XLink will revolutionize Web linking. Nicholas C. Zakas, coauthor of Professional AJAX runs his own website with a lot of useful extensions. The problem is to find the best extensions and libraries. Som libraries and extensions are not needed in the latest versions of PHP, so before you run to install a third party library, take some time to see if a simpler solution is available. My own site has a lot of resources related to AJAX, Ruby and web 2.0 developement. Another of my sites, DigitalStart has a lot of information on the XML families of technologies, well-formed and valid documents. An XML document must be well foremd, but need not validate. In addition to SimpleXML there is another model, DOM that is used to manipulate XML documents. This API is larger, but together the two technologies can solve most problems regarding XML problems. We added thi introductory note about the XML family of technologies, since our main principle, make it simple, as simple as possible, sometimes say that using the SimpleXML API is all that is required to consume a web service.
- W3C Web Services Architecture
- W3schools Web Services Tutorial
- W3schools forums
- Sitepoint XML and Web Services forum
- eBay Developer Resources
- IBM SOA and Web services
- Next generation web development is here. Are you ready?
- del.icio.us direc.tor: Delivering A High-Performance AJAX Web Service Broker
- WebServices.org
- Microsoft: Web Services and Other Distributed Technologies
- Web Services in PHP
- Building Web Services the REST Way
- Implementing REST Web Services: Best Practices and Guidelines
- Konstrukt: A REST-ful framework of controllers for PHP5.
Web Services providers and resources
- Strike Iron
- StrikeIron Global SMS Pro Web Service
- The Strike Iron Web Services Marketplace
- Strike Iron: Web Services Provider list
- Remote Methods
- Programable Web
- eBay developers program
- amazon web services
- Code Google
- Yahoo Developer Network
- WSindex
- X Web Services
- Web Services Summit
- Web Services Architect
- Audioscrobbler Web Services
Optimize, structure and document your code. Cache your pages where possible.
- Golden Rules for Optimizing your pages
- When to optimize
- Performance Problems - what is the bottleneck?
- N-Tier: A quick introduction.
- Cost-Effective Website Acceleration
- Encode And Optimize PHP
- Optimize your code with XDEBUG
- Squeezing code with XDEBUG
- A HOWTO on Optimizing PHP.
- Memory allocation problems in PHP and how to optimize?
- Code optimization
- DataModel
- Generating XML data from SQL queries
- Simple Optimization for PHP and MySQL
- Relational Database Design Articles, Tutorials and Tips
- Getting Started with the Derby DB plattform.
- Database Performance Tuning and Optimization
- Optimizing your MySQL Application
- How to exploit MySQL index optimizations
- Optimizing MySQL: Queries and Indexes
- Indexes in MySQL
- How MySQL Uses Indexes
- Column Indexes
- Using PHP and MySQL for Large Projects: Optimizing Code
- Accelerating PHP Code Performance for Oracle
- Using MySQL, Normalisation
- Database normalization
- Database Normalization And Design Techniques
- memcache functions
- memcached
- Memcached-1.21
- Database Normalization explained
- An Introduction to Database Normalization
- Relational Database Normalisation
- A howto on optimizing PHP
- Sturcture code with PHP patterns
- Effortless (or Better!) Bug Detection with PHP Assertions.
- Simple Test for PHP
- PHPUnit
- Reduce load on your webserver by caching
- Caching in PHP using the filesystem, APC, and Memecached
- Umbrello UML Modeller
- phpDocumentor
- Doxygen
- Grid Computing Info Centre (GRID Infoware)
- Oracle Grid Computing
- Sun Grid Computing Solutions
- IBM and Schwab Tag Team on Linux Grid Computing
- .NET Grid Computing Solutions
- slGrid, Ajax-Based PHP Grid Component
- AJAX-Based PHP Grid
- slGrid, Ajax-Based PHP Grid Component
- DEVELOPING A PHP-BASED LEGACY APPLICATION GRID SYSTEM
- FastReport
Building portable applications
- Association of Shareware Professionals
- What is PAD?
- PAD overview - Specification Details
- PAD_Spec_Version 3.01
PHP resources for image manipulation
- PHP.NET Image Functions
- pear image packages
- ImageMagick
- ImageMagick Forum
- ImageMagick Studio
- Create Dynamic Images with ImageMagick
- JpGraph
- SketchPad tutorials
- Developing Professional Quality Graphs with PHP
- Tufat
- Great software by example
- WebCam Snapshot by Robert M. Hall
- Feasible impossibilities
- VTC Online & CD Computer Software Training
- Kaourantin.net
Syndication standards and important URL's for those standards.
The following resources and standards are important. There are no universal agreement in RSS. Probably the most complex RSS structure is RSS 1.0, at least of this writing in july 2007. Once you understand an RSS 1.0 document, the other syndication formats will be much easier to use. Atom is an other format that was created because of the disagreements in the RSS community. In strict mathematical term, a URL is a subset of a URI that is a subset of an IRI
- I E T F
- W3C: RDF
- RSS 2.0 at Harvard Law
- W3C: RDF Syntax namespace
- Resource.org: RDF Site Summary (RSS) 1.0
- AtomEnabled
- The Dublin Core Metadata Initiative
- The Dublin Core Element Set v1.1 namespace
- RDF Site Summary 1.0 Modules: Syndication
- RDF Site Summary 1.0 Modules: Content
- Purl
- A grassroots coalition fighting for standards
Syndicate and import content to your site
Here are some resources that should help you in syndication and importing external content to your site:
- JSON
- RSS Feed Guide
- Project ROME
- Displaying an RSS Feed
- MagpieRSS: RSS for PHP
- Gecko Tribe
- Gecko Tribe Carp
- Gecko Tribe Tetra
- W3 Schools
- XML Namespaces Explained
- Introducing XML
- XML Namespaces Explained
- Resource Directory Description Language (RDDL)
- Web Services Demystified
- XML Remote Procedure Calling (RPC)
- The Incutio XML-RPC Library for PHP
- Dev Shed XML
- ZVON The guide to the XML Galaxy
- TopXML
- Dev Shed XPath Basics
- ZVON XPath tutorial
- RSS2HTML
- SAX Project
- eZ Systems
- W3C RDF Validator
- FEED Validator
- RSS Validator
- W3C Extensible Markup Language (XML)
- W3C Document Object Model (DOM)
- W3C XML Path Language (XPath)
- W3C XSL Transformations (XSLT)
- W3C Web Services Description Language (WSDL) 1.1
- W3C Simple Object Access Protocol (SOAP)
- W3C Web Services Activity
- W3C Semantic Web
- W3C Metadata and Resource Description
- PHP Filesystem Functions
- PHP XML Parser Functions
- PHP DOM XML Functions
- PHP XSLT Functions
- PHP XML-classes
- PHP XqueryLite class
- XML-RPC
- CapeScience
- PHP Classes
- PHPclasses SVG
- WMLbrowser.mozdev.org
- HAWHAW Make your website mobile
- HAWHAW Class reference
- OPERA
- Mozilla
- Mozilla XML User Interface Language (XUL)
- Introducing XUL Part I
- Introducing XUL Part II
- Introducing XUL Part III
- XULplanet
- XULplanet ref
- Aggregator UserLand
- Syndic8
- Hosted Applications
As an additional example, consider you have a class library, for example pear or PHPclasses and you have browsed the library and found a Database Abstraction Layer or the newer MDB layer. If you know how to import these classlibraries in your own project, you can write an adapter class (pattern) that map the pear connection class methods on to your own application. In other words, by writing a simple adapter class, you do not need to reinvent the wheel. If you know how to take advantage of such prewritten code (API), your project gets more like component programmning. You put together components to make the complete structure. An adapter class is a special case of a more general concept, design pattern, Gamma et. al. (1995). Excellent examples of how to use patterns in PHP, is explained by Fuchs (2005) volume II chapter 7. This takes your OO PHP to a higher level. You get a good introduction to OO PHP if you download chapter 2 from volume I (free). That chapter should be read, read again and reread if you want to make effective OO PHP projects. In the end of that chapter, it is for example explained how you share interface by inheritance, how you instantiate an array of child objects that is used to output different messages dependent on which child object that is instanciated. This is a good example of polymorphism (flexible sharing) in practice.
Now you should have a solid background in OOP and can go on to the more advanced languages like Java, C# or C++ if you ever need them. The WebProWorld post mentioned above has an example of generic algorithms or the ability to paramtrice software (code) in C++. That is also possible in C# and once you understand generics, you are able to write very compact and effective code. Now that you have learned to go and walk, run to the next level with BETA and learn the power of distributed objects etc. in a minimalistic, very compact language.
Litterature:
- Kent Beck (2000): "Extreme programming explained" Addison-Wesley ISBN 0-201-61641-6
- Gordon Blair, John Gallagher, David Hutchison and Doug Shephard (1991): "Object Oriented Languages, Systems and Applications." Pitman Publishing ISBN 0-273-03132-5
- Daniel J. Duffy (2004): "Financial Instrument Pricing Using Cpp" ISBN 0470855096
- Martin Fowler (1999): "Refactoring: Improving the Design of Existing Code" Addison-Wesley Professional ISBN 0201485672
- Harry Fuecks (2005): The PHP Anthology Object Oriented PHP Solutions
- Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides (1995): "Design Patterns: Elements of Reusable Object-Oriented Software." Addison-Wesley Professional ISBN 0201633612
- Loiane Groner (2014): "Learning JavaScript Data Structures and Algorithms" Packt Publishing ISBN-10: 1783554878 and ISBN-13: 978-1783554874
- Anders Hejlsberg, Scott Wiltamuth and Peter Golde ( 2003): "The C# Programming Language" Addison Wesley Publishing Company ISBN 0321154916
- Andrew Koening and Barbara E. Moo ( 2000): "Accelerated C++ Practical Programming by Example" Addison Wesley Publishing Company ISBN 0-201-70353-X .
- Mark Josi ( 2005): "Cpp Design Patterns and Derivatives Pricing" Cambridge University Press ISBN: 0521832357
- Bjørn Kirkerud (1989): "Object Oriented Programming With Simula" Addison Wesley Publishing Company ISBN 0 201 17574 6
- Craig Larman (2004): "Applying UML and patterns: An Introduction to Object-Oriented Analysis and Design and Iterative" Prentice Hall PTR ISBN 0131489062
- Josh Lockhart (2015): "Modern PHP: New Features and Good Practices" O'Reilly ISBN-13: 978-1491905012 and
ISBN-10: 1491905018 - Justin London ( 2004): "Modeling Derivatives in Cpp" Wiley ISBN 0471654647
- Ole Lehrmann Madsen, Birger Møller-Pedersen and Kristen Nygaard ( 1993): "Object-Oriented Programming in the BETA programming language" Assn for Computing Machinery. ISBN 0201624303
- Steven John Metsker (2004): "Design Patterns C# " Addison-Wesley Professional ISBN 0321126971
- Addy Osmani (2012): "Learning JavaScript Design Patterns" O'Reilly ISBN-13:Â 978-1449331818 andISBN-10:Â 1449331815
- Robert Richards (2006) : "Pro PHP XML and Web Services" Apress ISBN: 1590596331
- William Stamatakis (2006): ".NET Concurrency Design Patterns: Programming in C#" Addison-Wesley Professional ISBN 032116606X
- Bjarne Strostrup (1994): "The Design and Evolution of C++" Addison-Wesley ISBN 0-201-54330-3
- Simon Timms (2014): "Mastering JavaScript Design Patterns" Packt Publishing ISBN-10: 1783987987 and ISBN-13: 978-1783987986
- Matt Zandstra (2013): "PHP Objects, Patterns, and Practice" Apress ISBN-13: 978-1430260318 and
ISBN-10: 1430260319