Web Development Best Practices (PHP Best Practices)

Websites development is one of the most challenging projects ever to develop, according to the large number of components you deal with, integrate, and manage in your application. For example, most web projects Deal with databases as their data source, and Integrate with external services called web services and APIs. As well the application Manages its own objects and components from views to models to controllers to plugins and so on.

A skilled web developer should have a great/deep knowledge in most of components used in his system, and as well should have intensive focus on how each component work and how can be used, what can be done, and what cannot.

On the other hand, the huge amount of requirements, components to manage, and time frame given to you to accomplish your mission, and number of people in your team, all these factors together requires from you to organize your tasks, and priorities your requirements, do deep analysis and planning in order to have a high quality product, efficient and delivered on time.

Optimal solutions cannot be achieved all the time, due to many factors, will be discussed in separate articles, but on the other hand, we’ve to provide the most efficient solution with least cost. This applies too to the source code we write.

When more than one developer work on a project, each developer has his imagine, his taste, and his experience, and for sure his mentality. Opening the choice for each developer to apply his taste, experience, and ideas is not always right, and most probably ends with revamping, code fixes, and code rewrite! That’s why there is always standards, headlines and best practices that each web developer has to follow, in order to keep source code clean, maintainable, readable, and efficient. In most cases breaking these standards ends with more bugs, much time spent to fix simple issues, high cost for maintaining the code, and finally revamping the source code again.

Today, I’m going to mention some of the standards, best practices that PHP web developers should follow when writing source code:

1. Ensure documenting your classes/methods, so that any developer will use these classes/methods will have knowledge how to call these methods, what should be passed as parameters, and what are the expected results for calling these classes/methods. It’s recommended as well to use phpDocumentor style of documentation, for e.g:
/**

* @param string $username Username of the user.
* @param string $password Password of the user.

* @return boolean Result of validation

* @author Anas Jaghoub <2013-10-7>

**/
public function isValidUserCredentials($username, $password) {
.
.
.
return $result;

}

2. Make sure that objects/arrays are not null before accessing their properties/elements. For e.g:
$user = $userTb->getUserByID($id);
echo ‘Welcome: ‘ . $user->name; // bad practice.

If(!empty($user)) {
echo ‘Welcome: ‘ . $user->name; // best practice.

}

3. Use default parameters as possible in methods. For e.g:
function sum($a = 0, $b = 0) {
return $a + $b;
}

4. Use built-in array functions as much as possible instead of using your own logic, specially in_array, explode, implode, and array_map. For e.g:
array_map(‘trim’, $array); // best practice.
Instead of a bad practice:
foreach($array as &$arr) {
$arr = trim($arr);

}

5. Follow a standard naming convention for classes, methods, variables, and constants. For e.g: Class names are MixedCase, functions and variables are camelCase, constants are ALL_UPPER, and non public class members _underscorePrefixed.

6. Make sure that your methods are returning values in all cases, for e.g:
Bad practice
function sum($a, $b) {
if(!empty($a) && !empty($b) {
return $a+b;
}
}
The previous function returns ONLY the sum result of $a+$b in case both $a and $b has values. Otherwise nothing will be returned.

7. Follow a standard indentation and styling for your source code, and make sure that all your teammate follow the same style and format.

8. Use inheritance, abstraction, static functions, singletons, factories as much as you can, this will save a lot of time, will make you code reusable, and as well affects the memory consumed.

9. Make sure that your source code is maintainable, sustainable, scalable, readable, and efficient.

10. Keep it simple, and don’t repeat you self.

11. Don’t re-invent the wheel, instead improve it.

To be continued in next article 🙂

 

References: 

http://www.slideshare.net/weierophinney/best-practices-of-php-development-presentation 

http://www.slideshare.net/rayhan_wm/standard-coding-oop-techniques-and-code-reuse 

http://www.yiiframework.com/doc/guide/1.1/en/basics.mvc 

 

Advertisements

MVC Best Practices, (Tweaking Yii Framework)

Today, I’m going to talk about MVC, what is it, why we should use it in web development, then we’ll dig a bit to Yii framework, to see how does it work, and talk about best practices of MVC’s and Yii framework as well. On the other hand will talk about tweaking Yii framework to speed up a website performance.

What is MVC?

  • MVC is not only a 3 terms combined together.
  • MVC is a design pattern, a software architecture, a standard used by developers to organize high scale projects.
  • The main idea behind using MVC: code re-usability, separation of concerns, modularity, scalability, and maintainability.
  • MVC is a Model, View, Controller. where the model represents the data layer, the view represents the presentation layer, and the controller responsible for handling requests, managing models/views.

     

    What is Yii?

    • Yii is a high performance, component based MVC framework, for developing web applications using PHP.
    • Yii, one of the fastest/efficient/lightweight/feature-rich frameworks.
    • Yii can be used for developing any type of web applications, because it is lightweight and supports caching.
    • Yii is purely implemented using OOP.
    • http://www.yiiframework.com/

     Why Yii?

    • Implements the MVC.
    • Intensively follows OOA/OOP standards, such as (Classes, Objects, Abstracts, Interfaces, Name spaces, Inheritance, Polymorphism, Static functions, Over-riding, Singletons, Factories, Black boxes…etc).
    • Has a useful documentation, and all its classes/functions fully documented with code samples.
    • Supported widely by community, and has a lot of extensions, widgets, that helps developers doing prototypes easily and in minimum time.
    • Open Source, Free to use,share and update.

    How Does Yii Works?

     

    Tweaking Yii

    Performance of web applications is affected by many factors, like db access, I/O operations, network bandwidth, 3rd party services…etc
    On high traffic applications, many tweaks can be done that enhance the performance of the application.

    Talking about tweaks/tricks in details will take us long time, so today we are going to talk in high level about concept and techniques. Hopefully in next articles we discuss each tweak in more details, and provide show cases before/after the tweak.

    1. Enabling APC Extension:
    PHP APC extension caches and optimizes PHP intermediate code, and avoids the time spent in parsing PHP scripts for every incoming request.

    2. Disabling Debug Mode:
    Many Yii components have too much logging statements that run in debug mode, so disabling debug mode will stop logging non-necessary code snippets.
    Note: Debug mode is disabled by having the YII_DEBUG set to false.

    3. Using yiilite.php:
    By default Yii bootstrap file is yii.php, which is responsible for bootstrapping Yii, and including common libraries and scripts. On the other hand, on each release Yii provides a file named yiilite.php which is a clean/comments free version of the yii.php file, plus with a reduced number of script includes, since common libraries already merged to one file.

    4. Caching:
    Frequently accessed data should be cached, such as db schema, complex view, models …etc

    5. Database Optimization:
    It’s not a secret that Active Records degrades performance on both db level and parsing level, due to the fact that each active record instance represents a connection to the db, and can run heavily queries to db, and might append unneeded conditions to the query specially on count queries.

    Active Records is good for modeling data in an OOP fashion, but on the other hand degrades the performance of application.

    Hence it is preferred to have heavily queries, queries that deals with enormous data, to be run using low-level database APIs instead of using active records.

    Queries should avoid unneeded joins, and try to lazy loading related models instead of eager loading.

    SELECT queries should have LIMIT statement to avoid exhausting the memory allocated to PHP.

    Tables with enormous data should be indexed.

    It is recommended to use database views for complex queries instead of issuing the queries from PHP and passing it to DBMS to parse them.

    6. Minimizing Script Files:
    External Javascript/CSS files should be minimized and combined, to avoid too many requests from each client, and hence reduce the network transmission time.

    7. Symlinking assets:
    Asset manager after doing include/minimize/combine process copies generated files from their original path to assets directory, this process can be tweaked by stopping the copy process and replace it with a symbolic link to the generated file.

    Conclusion 

    • Yii is one of the best MVC frameworks that can be used to develop web applications.
    • Yii is lightweight, efficient, and feature-rich framework.
    • Yii intensively follows OOP standards.
    • Too many tricks/tweaks can be followed that increases application performance.
    • Controllers should be thin, models should be fat, views should avoid too much logic, and/or dealing directly with model logic.

سلسلة تعلم برمجة تطبيقات الاندرويد – إنشاء أول تطبيق للاندرويد – الحلقة رقم 2

تحدثنا في الحلقة السابقة عن إعداد بيئة العمل، وأهم الأدوات والحزم اللازمة للبدء في تطوير تطبيقات لنظام التشغيل الاندرويد. سنتحدث في هذه الحلقة عن كيفية إنشاء تطبيق للاندرويد، وما هي مكونات تطبيق الاندرويد والبنية الهيكلية ﻷي تطبيق على الاندرويد.

إنشاء تطبيق

باستخدام بيئة العمل Netbeans :

1. اضغط على قائمة File

2. اختر New Project.

3. اختر نوع المشروع Android

4. اضغط زر Next.

5. اضبط إعدادات المشروع كالتالي:
Project Name: اسم المشروع، يفضل أن يكون اسم المشروع هو نفس اسم التطبيق وذلك لتمييزه عن باقي المشاريع الأخرى
Package Name: اسم حزمة المشروع، وهنا يجب اتباع قواعد تسمية الحزم في لغة Java
إذ يجب أن تتكون من مقطعين على الأقل ويفصل بين كل مقطع بنقطة، ولا يوجد فراغات.
Target Platform: رقم نسخة نظام التشغيل الاندرويد التي يدعمها هذا التطبيق، وهنا لا بد من اختيار أقل رقم يتوافق معه هذا التطبيق

لمزيد من التفاصيل شاهد الصورة التالية:
netbeans-create-android-project

6. اضغط على زر Finish

وهكذا نكون قد أنشأنا بمساعدة بيئة العمل Netbeans

أول تطبيق للأندرويد حيث تم تصميم هيكل التطبيق، واستدعاء كافة الحزم والبرامج اللازمة لتشغيل التطبيق.

مكونات وهيكلية تطبيق الاندرويد

الصورة التالية توضح المكونات الأساسية والبنية الهيكلية لأي تطبيق يعمل على نظام التشغيل اندرويد، وفي الأسفل شرح مبسط لكل مكون من المكونات وأهميته.

android-application-structure-and-components

توضح الصورة السابقة مكونات وهيكلية تطبيق الأندرويد، إذ يظهر في الصورة:

1. Source Packages:

يحتوي هذا المكون على الحزم وبداخله النص البرمجي الذي يستخدمه التطبيق لتأدية الوظائف والمهام المنوطة به، وهنا لا بد من الإشارة إلى أن كل الحزم المستخدمة تابعة للتطبيق نفسه، والوظائف والمهام داخل هذه الحزم لا بد من أن تكون خاصة فقط بالتطبيق ومهامه، وذلك للفصل بينها وبين الحزم التي تستخدم لتأدية وظائف ومهام عامة وقد تستخدم في أكثر من تطبيق. إذ أن هذا النوع من الحزم له مكون آخر خاص به سنتحدث عنه بعد قليل.

وتجدر الإشارة هنا إلى أن الحزم في لغة الجافا تتكون من العديد من الفئات (Classes)
وكذلك الأمر في الحزم المستخدمة في تطبيق الأندرويد.

2. Resources:

يحتوي هذا المكون على كل المصادر التي يحتاجها تطبيق الاندرويد، من صور، وفيديو، وأيقونات، وتعريفات تصميمات شاشات العرض، بالإضافة إلى أية إعدادات خاصة بالتطبيق، مثل اسم التطبيق ورقم النسخة وحقوق التطوير، وأية مصادر خارجية وروابط يحتاجها التطبيق لتأدية وظائفه، وتكمن أهمية هذا المكون بأنه يتم تعريف كافة المصادر بداخله مرة واحدة، وبعد ذلك يتم الرجوع والإشارة إليه من أي مكان داخل التطبيق.

3. Libraries

يحتوي هذا المكون على كل الحزم التي يحتاجها التطبيق لتأدية وظائف معينة، وتمتاز هذه الحزم بأنه تؤدي وظائف عامة ليست مخصصة فقط لهذا التطبيق، وهذا ما يميز هذا المكون عن المكون Source packages.

4. Important Files

يحتوي هذا المكون على الإعدادات الخاصة بعملية بناء التطبيق، والعمليات المرافقة لتنصيب التطبيق على نظام التشغيل اندرويد. ويوجد بداخل هذا المكون ملفين رئيسيين، الأول
AndroidManifest.xml
وهو عبارة عن ملف xml
يتم تعريف كل الأمور المتعلقة بالتطبيق والمصادر والصلاحيات التي يحتاجها التطبيق من نظام التشغيل، وتتم قراءة هذا الملف من قبل نظام التشغيل الاندرويد، في لحظة تنصيب التطبيق بعد موافقة مستخدم النظام. أما الملف الآخر فهو Build.xml
وهو المسؤول عن إعدادات بناء النص البرمجي وربط المصادر وتعريفها، ويتم التعامل مع هذا الملف من خلال بيئة العمل وليس من خلال المطور نفسه.

وهكذا نكون قد أكملنا المكونات الرئيسية لأي تطبيق يعمل على نظام التشغيل أندرويد. بقيت خطوة أخيرة، وهي كيفية بناء هذا التطبيق وتنفيذه.

من قائمة Run

اختر Run Project

وفي حال كان هناك جهاز يعمل على نظام التشغيل اندرويد مرتبطا بالكومبيوتر فإنه سيتم تنصيب التطبيق على الجهاز فورا، وفي حال عدم توفر جهاز فإنه سيتم تنصيب وتشغيل التطبيق على جهاز افتراضي Virtual Device

شاهد الصورة بعد بناء التطبيق السابق:

android-default-application-view

وهكذا نكون قد أنهينا حلقة اليوم من سلسلة تعلم تطوير تطبيقات الاندرويد، وستكون إن شاء الله الحلقة القادمة في التعرف عن قرب في كيفية بناء تطبيق بسيط يعمل على البحث في التغريدات على تويتر وعرضها بطريقة مرتبة، وربما تستمر عملية تطوير هذا التطبيق لعدة حلقات.

أنس الجاغوب

Twitter: @anasjaghoub
Facebook: http://www.facebook.com/anasjaghoub

سلسلة تعلم برمجة تطبيقات الاندرويد – إعداد بيئة العمل – الحلقة رقم 1

في هذه الحلقة سنقوم بتجهيز بيئة العمل، وإعداد كافة الأدوات والبيئة اللازمة للبدء في برمجة تطبيقات الاندرويد، لنتمكن في الحلقات القادمة من العمل والتطوير باستخدام الأدوات التي سنقوم بإعدادها في هذه الحلقة.

1. للبدء في تطوير أي برنامج على الاندرويد لا بد من توفر حزمة التطوير الأساسية وهي
Android SDK.

هذه الحزمة هي حجر الأساس لعمل أي تطبيق على الاندرويد حيث تحتوي على مجموعة كبيرة من الوظائف الاساسية والبرامج التي تمكننا من التحدث مع نظام التشغيل الاندرويد، وطلب تنفيذ العمليات والحسابات إلى غيره من الوظائف بحسب طبيعة كل تطبيق ووظائفه. وتمكننا أيضا من إنشاء أجهزة افتراضية Virtual Machines تساعدنا على تجربة التطبيقات حتى بدون وجود جهاز اندرويد

 2. حزمة الجافا JDK
والتي تقوم بترجمة النص البرمجي لحزمة الاندرويد وكذلك النص البرمجي للتطبيق وتحويله إلى نسخة تنفيذية قابلة للعمل على أي جهاز اندرويد

3. بيئة العمل IDE
وفي هذه السلسلة سنقوم باستخدام Netbeans
وذلك لسهولة استخدامه وسهولة التطبيق عليه.

كما يمكن أيضا استخدام بيئة العمل Eclipse.

ولغايات تبسيط هذه الحلقة وجعلها مخصصة فقط للاندرويد، سأقوم فقط بشرح طريقة ربط

Netbeans مع ال Android SDK

وسأكتفي بالإشارة إلى روابط تحميل وتنصيب كافة الأدوات والحزم التي تلزمنا في هذه الحلقة، ويمكن الرجوع إلى دليل الاستخدام في كل رابط للمزيد من التفاصيل. أو من خلال وضع المشكلة أو أي استفسار في التعليقات أسفل الموضوع. وسأحاول قدر الإمكان الإجابة على استفسارتكم أو من خلال طرحها في حلقة مفصلة.

الروابط:

1. حزمة ANDROID SDK:

http://developer.android.com/sdk/index.html

2. حزمة Java JDK:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

3. بيئة العمل Netbeans:

http://netbeans.org/downloads/

بعد تنزيل وتنصيب كافة المستلزمات السابقة للبدء في عملية تطوير تطبيقات الاندرويد، سننتقل الان لخطوة ربط بيئة العمل
Netbeans مع حزمة Java JDK
ومن ثم ننتقل لخطوة الربط مع حزمة Android SDK.

1. قم بتشغيل Netbeans من خلال ال Terminal

 بعد الانتقال إلى مكان تنصيب ال Netbeans:

وذلك من خلال كتابة الأمر

./netbeans –jdkhome /usr/java/jdk1.7.0_05/

قم باستبدال /usr/java/jdk1.7.0_05/

بالمسار الذي قمت بتنصيب حزمة JDK فيه.

اذهب الآن إلى Tools > Plugins > واضغط على Settings.

اضغط على زر Add وأدخل التالي:

Name: Android
Url: http://kenai.com/projects/nbandroid/downloads/download/updatecenter/updates.xml

شاهد الصورة

netbeans-android-setings

اضغط على Ok

وانتقل بعدها إلى قسم Available Plugins

من نفس النافذة واختر Android

وقم بالضغط على زر install.

بعد تنصيب Android Plugin

انتقل الان إلى قائمة  Tools

واختر Options

ومنها اختر Miscellaneous

ومنها اختر قسم Android .

بعدها اضغط على زر Browse

وانتقل بالمتصفح إلى المسار الذي قمت بتنصيب Android SDK

فيه كما في الصورة التالية.

netbeans-configure-android-sdk

قم بعد ذلك بتحديث حزمة Android SDK

من خلال الضغط على  Tools

ومنها اختر Android SDK and AVD Manager

كما في الصورة التالية:

netbeans-install-android-sdk-updates

وهكذا نكون قد أتممنا كافة المستلزمات والأدوات التي نحتاجها للبدء في تطوير برمجيات الاندرويد، أتمنى أن يكون الشرح وافيا ومبسطا، حتى نتمكن من الانتقال للحلقة الثانية والتي ستكون عن هيكلية ومكونات تطبيق الاندرويد.

بانتظار ردودكم واستفساراتكم وأية مقترحات تخص هذه الحلقة بشكل خاص أو السلسلة بشكل عام من خلال التعليقات في الأسفل.

أنس الجاغوب

Twitter: @anasjaghoub

Facebook: http://www.facebook.com/anasjaghoub

تعلم تطوير تطبيقات للموبايل باستخدام الأندرويد

مرحبا أصدقائي يسعدني أن أبدأ معكم سلسلة حلقات في تعلم تطوير تطبيقات للموبايل باستخدام الأندرويد ، وسأسعى جاهدا معكم في أن تكون هذه السلسلة من أوائل السلسلات في اللغة العربية لتعليم برمجة تطبيقات الأندرويد من البداية وحتى الاحتراف. وسأحاول قدر المستطاع الشرح بلغة عربية بسيطة ومفهومة. حيث ستكون غدا إن شاء الله الحلقة الأولى من تعلم تطوير تطبيقات الموبايل باستخدام الأندرويد.

اندرويد

أنس الجاغوب

Twitter: @anasjaghoub

Facebook: anasjaghoub

AABU GTUG Opening Event – February 17, 2011

AABU GTUG Opening Event

On February 17, 2011 We’ve headed to Al Al Bayt University, to run one of the biggest event established there, for opening the AABU GTUG (Google’s Technologies Users Group).

The event focused on introducing the GTUGS (Google’s Technologies Users Groups) and introducing Google’s technologies to students, such as Android and App Engine, to Chrome Extensions and HTML5 demos.

Attendees exceeded 250 attendee, in addition to Vice president of Al Al Bayt University Dr. Hashem Al Masaeed, Deanship of College of I.T at Al Al Bayt University Prof. Ismail Ababneh, and a quite number of professors and teachers at the college of I.T at AABU, in addition to Yarmuk fm and Al Ro’aya  tv.

AABU GTUG as a Google’s Technologies Users Group interested in Google’s technologies and tries as possible to increase students awareness about Google’s technologies, and introduce it to them.

Their was a lot of activities during the event, beginning with the key note from me Anas Jaghoub, that included introducing the AABU GTUG, and assuring for cooperate working with professors and students to increase the awareness of students about emergent technologies. On the other hand, we’ve announced to our first initiatives to students which is “Made in AABU”. Finally, read the schedule of our event and introducing the officers to students who are “Ahmad Hamad, Inas Shoman, Mohammad Jaradat, Mohammad Mashagbe, and Salam Al Sarayreh”.

Prof. Ismail Ababneh, participated in showing the support and help provided from college of I.T at AABU to the GTUG chapter, and motivating the students to participate and join our chapter.  Followed him Vice president of AABU Dr. Hashem Al Masaeed, and talked about technologies in general and its impression in our life, and mentioned number of Google’s technologies and its impression in our life, such as Google’s Earth, and Google’s Docs in addition to the biggest search engine in the world Google’s Search engine.

Eng. Mohammad Olaimat from his side introduced the Google web toolkit GWT to students and illustrated its architecture and approach in developing websites, and the main features in it.

Later on, our officers Mohammad Jaradat and Salam Al Sarayrah made a demo on HTML5, and introduced the main features in it. After that I (Anas) presented a short paragraph about App Engine, and its main features, and how to run “Hello World” application inside it.

From another side, Ahmad Hamad, Inas Shoman, and Mohammad Mashagbe presented a session to introduce Android and its main features and demos on it. Latest session presented by me (Anas) and was about Chrome Extensions, introducing it, and building a simple extension inside Chrome browser.

Finally, We’ve finished the session and thanked the attendees for their participation, and shared photos with each other.

P.S Here are some of the photos taken inside the event.

Cheers,

Anas Jaghoub,

Manager of AABU GTUG

 

View album View album View album View album View album
View album View album View album View album View album
View album View album View album View album View album
View album View album View album View album View album
View album View album View album View album View album
View album View album View album View album View album
View album View album View album View album View album
View album View album View album View album View album

 

PHP Tutorial–Guest Book–System Definition and Requirements

In this lesson I’m going to illustrate the system definition and requirements for the Guest Book application.

It is an important step in developing any application, since this step gives us an orientation about the system and its functionality, what is expected from the system to do. actually the system definition comes from keywords from customers and end users, usually try to make it clear for what they need in the application, and what they expect the system to do. 

As developers it is our role to define the requirements for the system to be developed. In our example the system definition for the Guest Book is: A system that allows visitors of the site to post their comments and feedbacks about the site, with the possibility for managing comments and maintain it easily and user friendly.

On the other hand, the system requirements are:

  • a web server, since it is clear that the developed system is going to run on the Internet, so it is a web-based application not windows-based.
  • Database server, in order to store the posts inside and retrieve it easily and on time access. In our example am going to use MySQL server.
  • Programming language, to apply the logic of the developed application and solve achieve the needed system. In our case, we are going to use PHP for this job, therefore the web server must be able to deploy PHP on it, so we might use Apache as server, we might use any server that supports PHP.
  • For user interface, we need XHTML and CSS to provide a user friendly interface, moreover we might use some codes of JavaScript to maintain ease of use and validating user inputs.

We might look for the system as a 3-Tier Layer, the Data Tier (MySQL Server), the Middle Tier or Business Tier (Apache Server and PHP), and the Presentation tier (XHTML, CSS,…).

That’s all for aspects related to the system definition and requirements, our next lesson will focus on analysis and design for the database including the implementation for it. Until then wish you all enjoy the development steps for the Guest Book application, any questions or feedbacks don’t hesitate to share it with us.

To download this lesson as PDF click here: PHP Tutorial–Guest Book–System Definition and Requirements

Cheers,

Anas Jaghoub