This document provides an overview of the Phalcon PHP framework. It discusses how Phalcon works as a C extension for high performance, how it compares to other PHP frameworks in terms of performance, and how to install, configure and create projects with Phalcon. Key aspects covered include Phalcon being written in C for optimized performance, its loose coupling allowing use of individual components, and its integrated ORM for database interactions.
3. A thanks to
For encourage and believe in the
passage of knowledge.
(And to release me from work to be here.) ”
4. Why?
• Use of frameworks has become mandatory in
professional development with PHP
• They offer a philosophy and organized structures to
easily maintain projects writing less code and making
work more fun
5. How PHP works?
1. PHP have dynamic and weak typing discipline
2. PHP is interpreted (not compiled)
3. Every time a script is loaded, should be interpreted
by PHP
4. If a bytecode cache (like APC) isn’t used, syntax
checking is performed every time
6. How traditional php frameworks works?
1. Many files with classes and functions are read at every request made.
Disk reading is expensive in terms of performance
2. Modern frameworks use lazy loading technique (autoload) for load and
execute only code needed
3. Continuous loading/interpreting could be expensive and impact your
application performance
4. When you use a framework most of the code remain the same across
development. Why load and interpret it every time?
7. How a PHP C extension works?
1. C extensions are loaded together with PHP one time, on the web server
dispatch process
2. Classes and functions provided by the extension are ready to use for
any application
3. The code isn’t interpreted because it is compiled to a specific platform
and processor
8. What is Phalcon?
Phalcon is an open source, full stack framework for PHP 5
written as a C-extension, optimized for high performance.
You don’t need to learn or use the C language, since the
functionality is exposed as PHP classes ready for you to
use. Phalcon also is loosely coupled, allowing you to use
its objects as glue components based on the needs of your
application.
9. How Phalcon works?
1. Components are loosely coupled. You may use the components you
want without depending on a full stack
2. Low-level optimizations provide the lowest overhead for MVC-based
applications
3. Interact with databases with maximum performance by using a C-language
ORM for PHP
4. Phalcon is directly engaged with PHP, so it can directly access internal
structures optimizing execution as well
11. Compare how Phalcon is faster than other
frameworks
Traditional Frameworks Phalcon
Interpretation of hundreds
or thousands of PHP lines
on each request
YES NO
Load dozens of files in
each request
YES NO
Checking the existence of
functions, methods,
classes, constants at each
request
YES NO
Low-level optimizations
gaining microseconds for
each request
NO YES
21. Installation
To use phalcon on Windows you can download a DLL library. Edit your
php.ini file and then append at the end:
extension=php_phalcon.dll
Restart your webserver.
22. Requirements
Prerequisite packages are:
PHP >= 5.3 development resources
GCC compiler (Linux/Solaris)
Git (if not already installed in your system - unless you download the
package from GitHub and upload it on your server via FTP/SFTP)
23. Requirements
Prerequisite packages are:
PHP >= 5.3 development resources
GCC compiler (Linux/Solaris)
Git (if not already installed in your system - unless you download the
package from GitHub and upload it on your server via FTP/SFTP)
24. Requirements
Specific packages for common platforms:
#Ubuntu
sudo apt-get install php5-dev libpcre3-dev gcc make php5-mysql
#Suse
sudo yast -i gcc make autoconf2.13 php5-devel php5-pear php5-mysql
#CentOS/RedHat/Fedora
sudo yum install php-devel pcre-devel gcc make
#Solaris
pkg install gcc-45 php-53 apache-php53
25. Compilation
git clone --depth=1 git://github.com/phalcon/cphalcon.git
cd cphalcon/build
sudo ./install
26. Configure
Add extension to your php configuration:
#Suse: Add this line in your php.ini
extension=phalcon.so
#Centos/RedHat/Fedora: Add a file called phalcon.ini in /etc/php.d/ with this content:
extension=phalcon.so
#Ubuntu/Debian: Add a file called 30-phalcon.ini in /etc/php.d/ with this content:
extension=phalcon.so
#Debian with php5-fpm: Add a file called 30-phalcon.ini in /etc/php5/fpm/conf.d/30-phalcon.ini with this content:
extension=phalcon.so
Restart the webserver.
27. Configure
Phalcon automatically detects your architecture, however, you can force the compilation for a specific architecture:
cd cphalon/build
sudo ./install 32bits
sudo ./install 64bits
sudo ./install safe
28. Mac OS X
On a Mac OS X system you can compile and install the extension from the source code:
Requirements
Prerequisite packages are:
PHP >= 5.3 development resources
XCode
#brew
brew tap homebrew/homebrew-php
brew install php53-phalcon
brew install php54-phalcon
brew install php55-phalcon
brew install php56-phalcon
#MacPorts
sudo port install php53-phalcon
sudo port install php54-phalcon
sudo port install php55-phalcon
sudo port install php56-phalcon
29. Installation on XAMPP
XAMPP is an easy to install Apache distribution containing MySQL, PHP
and Perl. Once you download XAMPP, all you have to do is extract it and
start using it. Below are detailed instructions on how to install Phalcon on
XAMPP for Windows. Using the latest XAMPP version is highly
recommended.
30. Installation on XAMPP
XAMPP is always releasing 32 bit versions of Apache and PHP. You will
need to download the x86 version of Phalcon for Windows from the
download section.
After downloading the Phalcon library you will have a zip file like the one
shown below:
32. Installation on XAMPP
Copy the file php_phalcon.dll to the PHP extensions. If you have installed
XAMPP in the c:xampp folder, the extension needs to be in
c:xamppphpext
33. Installation on XAMPP
Edit the php.ini file, it is located at C:xamppphpphp.ini. It can be edited with
Notepad or a similar program. We recommend Notepad++ to avoid issues with line
endings. Append at the end of the file: extension=php_phalcon.dll and save it.
34. Installation on XAMPP
Restart the Apache Web Server from the XAMPP Control Center. This will load the
new PHP configuration.
35. Installation on XAMPP
Open your browser to navigate to
http://localhost. The XAMPP welcome
page will appear. Click on the link
phpinfo().
phpinfo() will output a significant
amount of information on screen about
the current state of PHP. Scroll down
to check if the phalcon extension has
been loaded correctly.
If you can see the phalcon version in
the phpinfo() output, congrats!, You
are now flying with Phalcon.
36. Creating a project
File structure
Phalcon does not impose a particular file structure for application
development. Due to the fact that it is loosely coupled, you can
implement Phalcon powered applications with a file structure you are
most comfortable using.
37. Creating a project
For the purposes of this tutorial and as a starting point, we suggest the
following structure:
tutorial/
app/
controllers/
models/
views/
public/
css/
img/
js/
39. Bootstrap
<?php
try {
//Register an autoloader
$loader = new PhalconLoader();
$loader->registerDirs(array(
'../app/controllers/',
'../app/models/'
))->register();
//Create a DI
$di = new PhalconDIFactoryDefault();
//Setup the view component
$di->set('view', function(){
$view = new PhalconMvcView();
$view->setViewsDir('../app/views/');
return $view;
});
//Setup a base URI so that all generated URIs
include the "tutorial" folder
$di->set('url', function(){
$url = new PhalconMvcUrl();
$url->setBaseUri('/tutorial/');
return $url;
});
//Handle the request
$application = new
PhalconMvcApplication($di);
echo $application->handle()->getContent();
} catch(PhalconException $e) {
echo "PhalconException: ", $e->getMessage();
}
40. Creating a Controller
By default Phalcon will look for a controller named “Index”. It is the starting point when no controller or action has been passed in
the request. The index controller (app/controllers/IndexController.php) looks like:
<?php
class IndexController extends PhalconMvcController
{
public function indexAction()
{
echo "<h1>Hello!</h1>";
}
}
41. Creating a Controller
Sending output to a view
Sending output to the screen from the controller is at times necessary but not desirable as most purists in the MVC community will
attest. Everything must be passed to the view that is responsible for outputting data on screen. Phalcon will look for a view with the
same name as the last executed action inside a directory named as the last executed controller. In our case
(app/views/index/index.phtml):
<?php echo "<h1>Hello!</h1>";
Our controller (app/controllers/IndexController.php) now has an empty action definition:
<?php
class IndexController extends PhalconMvcController
{
public function indexAction()
{
}
}
42. Creating a Model
Phalcon brings the first ORM for PHP entirely written in C-language. Instead of increasing the complexity of development, it
simplifies it.
Before creating our first model, we need to create a database table outside of Phalcon to map it to. A simple table to store
registered users can be defined like this:
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(70) NOT NULL,
`email` varchar(70) NOT NULL,
PRIMARY KEY (`id`)
);
43. Creating a Model
A model should be located in the app/models directory (app/models/Users.php). The model maps to the “users” table:
<?php
class Users extends PhalconMvcModel
{
}
44. Setting a Database Connection
In order to be able to use a database connection and subsequently access data through our models, we need to specify it in our
bootstrap process. A database connection is just another service that our application has that can be used for several
components:
45. Setting a Database Connection
<?php
try {
//Register an autoloader
$loader = new PhalconLoader();
$loader->registerDirs(array(
'../app/controllers/',
'../app/models/'
))->register();
//Create a DI
$di = new PhalconDIFactoryDefault();
/
/Setup the database service
$di->set('db', function(){
return new
PhalconDbAdapterPdoMysql(array(
"host" => "localhost",
"username" => "root",
"password" => "secret",
"dbname" => "test_db"
));
});
//Setup the view component
$di->set('view', function(){
$view = new PhalconMvcView();
$view->setViewsDir('../app/views/');
return $view;
});
//Setup a base URI so that all generated URIs
include the "tutorial" folder
$di->set('url', function(){
$url = new PhalconMvcUrl();
$url->setBaseUri('/tutorial/');
return $url;
});
//Handle the request
$application = new
PhalconMvcApplication($di);
echo $application->handle()->getContent();
} catch(Exception $e) {
echo "PhalconException: ", $e->getMessage();
}
46. Volt: Template Engine
Volt is an ultra-fast and designer friendly templating language written in C for
PHP. It provides you a set of helpers to write views in an easy way. Volt is
highly integrated with other components of Phalcon, just as you can use it as a
stand-alone component in your applications.
48. Volt: Template Engine
Volt views are compiled to pure PHP code, so basically they save the effort of writing PHP code
manually:
{# app/views/products/show.volt #}{% block last_products %}{% for product in products %}
* Name: {{ product.name|e }}
{% if product.status == "Active" %}
Price: {{ product.price + product.taxes/100 }}
{% endif %}{% endfor %}{% endblock %}