Symfony for Beginners – RNG Generator

Open NetBeans, on the left column> LMB over src\AppBundle\Controller folder> New PHP Class> LuckyController

LuckyController.php


<?php
// src/AppBundle/Controller/LuckyController.php
namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;

class LuckyController
{
    /**
     * @Route("/lucky/number")
     */
    public function numberAction()
    {
        $number = mt_rand(0, 100); // this is plain PHP

        return new Response(
            '<html><body>Lucky number: '.$number.'</body></html>'
        );
    }
}

Go to: http://localhost/symfonytest/first_test_symfony/web/lucky/number

It will render – Lucky number: 87 –

You CAN NOT CHANGE:
– namespace use
– class name LuckyController

You CAN CHANGE
– @Route(“/lucky/number”)
– your public function

You HAVE TO:
– return new Response

Example:


<?php
// src/AppBundle/Controller/LuckyController.php
namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;

class LuckyController
{
    /**
     * @Route("/lucky")
     */
    public function myAction()
    {
        $numberOne = mt_rand(0, 100); // this is plain PHP
        $numberTwo = mt_rand(0, 100); // this is plain PHP

        return new Response(
            '<html><body>First number: '.$numberOne.' Second number: '. $numberTwo .'</body></html>'
        );
    }
}

Go to: http://localhost/symfonytest/first_test_symfony/web/lucky

First number: 84 Second number: 79

By |PHP, Symfony, Web Design|Commenti disabilitati su Symfony for Beginners – RNG Generator

Create your First Page in Symfony – Route and Controller

We need a code editor, for PHP you can use NetBeans (https://netbeans.org/features/php/) or PHP Storm (https://www.jetbrains.com/phpstorm/)

Inside the project folder there are some directory:
– app
– bin
– src
– tests
– var
– vendor
– web
– composer.json
– LICENSE etc…

Focus on:

A. src: it holds all PHP files (classes)

B. app: it holds configuration, templates

Let’s move on!

1. Go to src/AppBundle/Controller/DefaultController.php, this in the default welcome page, delete it.
Now we have a real empty project :)

2. We need to create a ‘route’ and a ‘controller’
The route is where is the page, its url in poor words.
The controller is a software program that manages or directs the flow of data between two entities, it is the function that build the page.

3. Create inside AppBundle\Controller\GenusController.php

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;  // namespace for route
use Symfony\Component\HttpFoundation\Response;               // namespace for http render

class GenusController 
{
	/**
	* @Route("/genus")
	*/
	public function showAction() // this is the controller that create the page, returns a Response Object
	{
		return new Response('Under the <strong>Sea!</strong>'); // HTTP Text Render
	}
	
}


NOTICE:

– namespace AppBundle\Controller … use etc…: a Symfony namespace necessary for development

– class GenusController: the name of php file GenusController.php
We have created a class named GenusController that can be find by Symfony at src\AppBundle\Controller

– We use this particular syntax to define the http route of the page

/**
* @Route(“/genus”)
*/

It will be http://localhost/symfonytest/first_test_symfony/web/genus

– Controller to create the page:


	public function showAction() // this is the controller that create the page, returns a Response Object
	{
		return new Response('Under the <strong>Sea!</strong>'); // HTTP Text Render
	}
	

Run from the browser: http://localhost/symfonytest/first_test_symfony/web/genus

Official Link:
Ref: http://knpuniversity.com/screencast/symfony/first-page

By |PHP, Symfony, Web Design|Commenti disabilitati su Create your First Page in Symfony – Route and Controller

Symfony for Beginners – Home Pages and .twig Templates – Dev Setup

Create your First Home Page in Symfony

Environment Setup – Automatic Clear Cache

At the end of installation process will have: C:\wamp64\www\symfonytest>cd first_test_symfony

Inside the folder will be the folder structure of my project:
– app
– bin
– src
– tests
– var
– vendor
– web
– composer.json
– LICENSE etc…

Open your broser at: http://localhost/symfonytest/first_test_symfony/web/ to see the welcome page

Go to web\app.php and change the line:

$kernel = new AppKernel(‘prod’, false);

to

$kernel = new AppKernel(‘prod’, true);

This will activate – (‘prod’, true) – the production environment, this mean cache will not be saved, you can change file and reload in browser on the fly and see changes.

If – (‘prod’, false) – you can not reload from browser code changes

Go to var\cache\dev and var\cache\prod to see cache files for ‘dev’ and ‘prod’ environment.

Net Beans IDE

1. Run Net Beans IDE

2. File> New Project> PHP> PHp Application with Existing Sources> NEXT> Browse: C:\wamp64\www\symfonytest>first_test_symfony

HTML Render

1. Controller Request

Go to src\AppBundle\Controller\ -> here you will find all php codes for controllers
Open src\AppBundle\Controller\DeafaultController.php
Change the render page to indexmy.html.twig


return $this->render('default/indexmy.html.twig ...

2. .twig.html

Go to app\Resources\views\default\
and create indexmy.html.twig


{% extends 'base.html.twig' %}

{% block body %}
<h1>This is my first home page</h1>
{% endblock %}

{% block stylesheets %}
<style>
    h1 { font-size: 36px; }
</style>
{% endblock %}

Notice that {% extends ‘base.html.twig’ %}

Go to app\Resources\views\base.html.twig


<!DOCTYPE html>

<html>
    
<head>
<meta charset="UTF-8" />
        
<title> {% block title %}Welcome{% endblock %}</title>
        
	{% block stylesheets %}{% endblock %}
        
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}" />
    
</head>
    
<body>
        
	{% block body %}{% endblock %}
        
	{% block javascripts %}{% endblock %}
    
</body>

</html>

The process is:

return $this->render(‘default/indexmy.html.twig: -> call html.twig template -> extend base.html.twig

The rendered code inside the browser will be:


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><meta charset="UTF-8">
    <title>Welcome!</title>
	<style>
		h1 { font-size: 36px; }
	</style>
    <link rel="icon" type="image/x-icon" href="http://localhost/symfonytest/first_test_symfony/web/favicon.ico">
</head>
<body>
    <h1>This is my first home page</h1>
</body>
</html>

We can write:


{% extends 'base.html.twig' %}

{% block body %}
<h1>This is my first home page</h1>
<strong>Test</strong> HTML tags
<br>
<a href="http://www.lucedigitale.com">Visit Luce Digitale</a>
<br>
{% include 'my_code.html.twig' %}

{% endblock %}

{% block stylesheets %}
<style>
    h1 { font-size: 36px; }
</style>
{% endblock %}

Notice:
{% include ‘my_code.html.twig’ %} -> include a HTML code from a file in app\Resources\views\my_code.html.twig

Warning: you can not write native php code inside a .twig template, you need create an Extension Class (official docs at: http://symfony.com/doc/current/templating/twig_extension.html)

By |PHP, Symfony, Web Design|Commenti disabilitati su Symfony for Beginners – Home Pages and .twig Templates – Dev Setup

Symfony for Beginners – Installation on Windows Machine

What is Symfony? (https://symfony.com)
Symfony is a PHP web application framework and a set of reusable PHP components/libraries. Symfony was published as free software on October 18, 2005 and released under the MIT license.

Alternatives to Symfony are:
– Django (Python)
– Ruby on Rails (Ruby)

Let’s start!!!

WAMP INSTALLATION

1. First we need to install Apache, PHP and MySQL on our Windows Machine.
we can install them separately or installa a PHP development environment, that installs a ready to use environment. There are a lot of software for a dev PHP environment, the most popular are: WAMP XAMPP AMPPS. I will use WAMP.

a. Download WAMP at http://www.wampserver.com/en/#download-wrapper and launch the installer

b. Choose your .exe browser, I will use “C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” because I love the tools for developers of this browser.

Choose yout txt editor, for me is: “C:\Program Files (x86)\Notepad++\notepad++.exe”

c. Open theWindows firewall ports

d. Config the mail() function of PHP

… or leave the default parameters

If installation succeed you will find WAMP options in the notification bar nera your clock.

The WAMP icon will be green: all services running

LMB on WAMP icon:
– Local Host
– phpMyAdmin etc…

RMB on WAMP icon:
– Wamp Settings
– tools
– exit etc…

To avoid conflicts in port 80 with Skype, open Skype> Strumenti> Opzioni> Avanzate> Connessione> uncheck ‘Usa le porte 80 e 443 per le connessioni in ingresso aggiuntive’

WAMP TEST SCRIPT

Now I will test WAMP.

– Click LMB WAMP icon> www directory
– Create here a ‘test’ folder and a test script ‘index.php’


<?php

$name = "Andrew";
echo "My name is " . $name;

?>

– open the browser and digit http://localhost/test/

– You can also LMB WAMP icon> localhost, you will find under ‘Your project’ the ‘test’ folder, but you can not run with a simple click, use the browser at http://localhost/test/ to do it!!!

WAMP phpMyAdmin

– Click LMB WAMP icon> localhost under ‘Tools’ tab phpmyadmin> user ‘root’, pass leave blank

or call with browser http://localhost/phpmyadmin/

SYMFONY INSTALLATION on WAMP with COMPOSER

1. https://getcomposer.org/

2. Download> https://getcomposer.org/Composer-Setup.exe

3. Run as Administrator

4. wamp64/bin/php/php7.0.10/ php.exe

5. Win button> cmd.exe> C:\Users\HAF922\composer and composer will run

START A PROJECT

1. Go to the project folder, example symfonytest> SHIFT+RMB> ‘Apri finestra di comando qui

2. Win button> cmd.exe> composer create-project symfony/framework-standard-edition first_test_symfony
You can use Copy/Paste Win standard function if you want.

3. Download and installation start.
database_host 127.0.0.1: ok is local host
database_port: 3306
database_name: symfony
database_user: root
database_password: 123

secret: 123456

At the end the prompt will have: C:\wamp64\www\symfonytest>cd first_test_symfony

Inside the folder will be the folder structure of my project:
– app
– bin
– src
– tests
– var
– vendor
– web
– composer.json
– LICENSE etc…

Open your broser at: http://localhost/symfonytest/first_test_symfony/web/

Grats!!!

NOTES for Bluehost users at point 3. uses settings similar to the following:

database_driver: pdo_mysql
database_host: localhost
database_port: ~
database_name: (cpanelUsername_databaseName)
database_user: (cpanelUsername_databaseUsername)
database_password: (whatever you picked)
Example:

database_driver: pdo_mysql
database_host: localhost
database_port: ~
database_user: joe1337
database_name: joe1337_sym1
database_password: eHTb7%Pxa9

By |PHP, Symfony, Web Design|Commenti disabilitati su Symfony for Beginners – Installation on Windows Machine

PHP Lezione Itermedia – Oggetti Classi Proprietà Metodi Istanze Costruttori Ereditarietà

PHP Lezione Itermedia – Oggetti Classi Proprietà Metodi Istanze Costruttori Distrutturi Ereditarietà Visibilità Overriding

Concetti intermedi nella programmazione ad oggetti in PHP

Let’s go on!

Creare Oggetti in PHP – Proprietà Dinamiche e Metodi Dinamici

Prima di tutto è necessario capire come funziona la programmazione ad oggetti in PHP.

Un oggetto è del codice che raccoglie delle variabili e le funzioni per processarle.

L’oggetto va dichiarato esplicitamente con la sintassi ‘class’.

Nel gergo della programmazione ad oggetti per essere precisi varibili e funzioni all’interno della classe sono indicati con una terminologia particolare, per essere più precisi:

– le variabili sono definiti proprietà o membri
– le funzioni sono definite metodi

La distinzione di nome è molto importante perchè mentre le normali variabili e funzioni sono componenti libere o di primo livello, le proprietà ed i metodi di una classe appartengono esclusivamente a questa classe (ed eventualmente alle classe che ereditano, come vedremo nelle successive lezioni).

Per richiamare e utilizzare una classe si usano le istanze o oggetti che vengono dichiarate con la sitassi ‘new’ ad esempio.

File1:


class MyClass { // dichiaro l'oggetto
 
        // variabili membro o meglio proprietà
        public $a = 10;
        public $b = 20;
         
        // funzioni o meglio metodi
        public function sayHello() {
                echo "Hello!";
        }
 
}

File2:


// DEVO dichiarare l'istanza, istanza cioè una copia di MyClass
$myClass_1 = new MyClass();
 
// richiama MyClass ed avvia la funzione sayHello() - stampa "Hello!"
$myClass_1->sayHello();
 
// richiama MyClass e preleva la variabile a - stampa 10
echo $myClass_1->a;

Per ogni classe può essere istanziato un numero illimitato di oggetti, ed inviare parametri:


$myClass_2 = new MyClass();
 
// ora la proprietà "a" dell'oggetto $myClass_2 è impostata a 20
$myClass_2->a = 20; // invia un valore ad a
 
// stampa 10
echo $myClass_1->a;

L’oggetto può essere dichiarato con le parentesi se vogliamo usare un costruttore pubblico nella classe
o senza le parentesi se non vogliamo usare un costruttore pubblico nella classe, in questo caso non abbiamo modo di influire sui parametri della classe.


$myClass_1 = new MyClass();
$myClass_2 = new MyClass;

Per richiamare valori variabili dall’interno della classe utilizzeremo la keyword $this che si riferisce sempre all’istanza corrente che stiamo utilizzando, o meglio al valore che è stato inviato dall’istanza.


class MyClass {
 
        // variabili membro o proprietà
        public $a = 10;
        public $b = 20;
         
        // funzioni o metodi
        public function sayHello() {
                echo "Hello! " . $this->a . " " . $this->b;
        }
 
}
 
$myClass_1 = new MyClass();
$myClass_2 = new MyClass();

// stampa "Hello! 10 20", usa i valori indicati all'interno della classe perchè l'istanza non ha inviato nulla
$myClass_1->sayHello();
 
// ora la proprietà "a" dell'oggetto $myClass_2 è impostata a 20
$myClass_2->a = 20;
 
// stampa "Hello! 20 20" perchè usa $this->a cioè il valore 'a' che proviene dall'istanza
$myClass_2->sayHello()

I metodi di una classe riconoscono TUTTE le keyword appartenenti alla classe.

Costruttori

Possiamo decidere quale comportamento deve assumere l’oggetto quando viene creato utilizzando il metoto costruttore o metodo magico con la sintassi __construct (doppio underscore e construct)


class MyClass {
 
        // proprietà
        public $a = 10;
        public $b = 20;
         
        // costruttore o metodo magico
        public function __construct($a, $b) {
                $this->a = $a;
                $this->b = $b;
        }
         
        // metodi
        public function sayHello() {
                echo "Hello! " . $this->a . " " . $this->b;
        }
 
}
 
// creazione delle istanze, notare che i parametri verranno passati al costruttore
$myClass_1 = new MyClass(40, 40);
$myClass_2 = new MyClass("a", "b");

Il funzionamento è il seguente:
1. $myClass_1 = new MyClass(40, 40); è una istanza che invoca MyClass() ed invia 40,10
2. MyClass riceve in public function __construct($a, $b)
3. Che assegna il valore alla variabile in base al valore ricevuto dall’istanza $this->a = $a;
4. sayHello() scrive Hello 40 40

Ovviamente in questo caso, non possiamo omettere i parametri nella fase di creazione delle istanze, altrimenti PHP genererebbe un E_WARNING che ci avvisa della mancata presenza dei parametri richiesti dal costruttore.

Controlli sui Costruttori

Sarà possibile inserire dei controlli alla variabili inviate dall’istanza ad esempio:


class MyClass {
 
        // proprietà
        public $a = 10;
        public $b = 20;
         
        // costruttore
        public function __construct($a, $b) {
                // gli argomenti devono essere interi
                if(!is_int($a) || !is_int($b)) exit("The arguments must be integers!");
                // gli argomenti devono essere minori di 100
                if($a > 100 || $b > 100) exit("The arguments must be less than 100!");
                 
                $this->a = $a;
                $this->b = $b;
                 
                // connessione ad un nostro dataase interno
                connect_to_my_db($this->a, $this->b);
                 
                // operazioni...
        }
         
        // metodi ...
 
}
 
// creazione delle istanze
$myClass_1 = new MyClass(40, 80);               // ok
$myClass_2 = new MyClass("a", "b");             // errore: "The arguments must be integers!"

NOTARE:
if(!is_int($a) || !is_int($b)) exit(“The arguments must be integers!”);
if($a > 100 || $b > 100) exit(“The arguments must be less than 100!”);

Distruttori

Per distruggere gli oggetti si utilizza il metodo magico __destruct (doppio underscore destruct), il metodo __destruct NON ACCETTA argomenti.

Il metodo distruttore viene utilizzato per il clean up delle risorse, ad esempio per la chiusura del database.


class MyClass {
 
        // proprietà
        public $a = 10;
        public $b = 20;
         
        // costruttore
        public function __construct($a, $b) {
                $this->a = $a;
                $this->b = $b;
                 
        }
         
        // distruttore
        public function __destruct() {
                echo "__destruct method called!";
        }
 
}
 
// creazione delle istanze
$myClass_1 = new MyClass("username", "password");
$myClass_2 = new MyClass("username", "password");
$myClass_3 = new MyClass("username", "password");
$myClass_4 = $myClass_3;
 
// distruzione delle istanze
unset($myClass_1);              // stampa "__destruct method called"
$myClass_2 = 0;                 // stampa "__destruct method called"
 
unset($myClass_3);              // non chiama il distruttore, esiste ancora un riferimento all'oggetto $myClass_3

PHP chiama il metodo distruttore solo quando è davvero sicuro che tutti i riferimenti all’oggetto siano stati cancellati oppure quando l’oggetto è distrutto/cancellato manualmente con unset.
Inoltre tutti gli oggetti, come del resto tutte le variabili, vengono distrutti automaticamente da PHP al termine dello script.

Uso di __destruct per la chiusura del database:


class MyClass {
 
        // proprietà
        public $a = 10;
        public $b = 20;
         
        // costruttore
        public function __construct($a, $b) {
                $this->a = $a;
                $this->b = $b;
                 
                // connessione al database interno
                connect_to_my_db($this->a, $this->b);
        }
         
        // distruttore
        public function __destruct() {
                // operazioni di clean up...
                // chiusura del database e rilascio delle risorse
                free_my_db();
        }
         
        // metodi
        public function sayHello() {
                echo "Hello! " . $this->a . " " . $this->b;
        }
 
}
 
// creazione delle istanze
$myClass_1 = new MyClass("username", "password");

Proprietà Statiche

Le proprietà statiche si dichiarano attraverso la parola chiave (“static”)

Le proprietà statiche non appartengono a nessuna istanza in particolare, quindi non possono essere richiamate con l’operatore di deferenziamento (“->”)

Sono di fatto componenti statiche di proprietà della classe stessa e vengono richiamate con l’operatore di risoluzione (“::”) oppure con la keyword self.


class MyClass {
 
        // proprietà statiche
        public static $apples = 10;
        public static $pineapples = 20;
 
}
 
// stampa 10
echo MyClass::$apples;
 
// stampa 20
echo MyClass::$pineapples;

Le proprietà statiche possono cambiare il loro valore:


class MyClass {
 
        // proprietà statiche
        public static $instances = 0;
        public $idKey = false;
         
        // costruttore
        public function __construct() {
                $this->idKey = ++self::$instances;
                echo "This is the #" . $this->idKey 
		. " instance of the class MyClass.Instances created: " . $this->idKey;
        }
         
        // distruttore
        public function __destruct() {
                echo "Instance #" . $this->idKey . " deleted.";
        }
 
}
 
// stampa "This is the #1 instance of the class MyClass. Instances created: 1"
$myClass_1 = new MyClass();
 
// stampa "This is the #2 instance of the class MyClass. Instances created: 2"
$myClass_2 = new MyClass();
 
// stampa "This is the #3 instance of the class MyClass. Instances created: 3"
$myClass_3 = new MyClass();
 
// al termine dello script: "Instance #1 deleted.", "Instance #2 deleted.", "Instance #3 deleted."

Metodi Statici

I metodi statici sono dati di classe che non appartengono a nessuna istanza in particolare. Anch’essi devono essere preceduti dalla keyword ‘static’ e richiamati con ::


class MyClass {
 
        // metodi statici
        public static function sayHello() {
                echo "Hello!";
        }
         
        public static function sayHelloAgain() {
                self::sayHello(); // la sintassi è self:: per richiamare il metodo statico dall'interno della classe
                echo " Again!";
        }
 
}
 
// stampa "Hello!"
MyClass::sayHello();
 
// stampa "Hello! Again!"
MyClass::sayHelloAgain();

Eredietarietà

Tramite l’ereditarietà (inheritance), una classe (sottoclasse o classe figlia), può ereditare sia i metodi che le proprietà da un’altra classe (superclasse o classe padre). Per estendere una classe si utilizza la keyword ‘extends’


class MyClass {
 
        const A = 10;
         
        // proprietà
        public $a = 10;
         
        // metodi
        public function sayHello() {
                echo "Hello!";
        }
 
}
 
class AnotherClass extends MyClass {
         
        // proprietà
        public $b = 10;
 
}
 
$myClass = new MyClass();
 
// stampa (10)
echo $myClass->a;
 
// modifica
$myClass->a = 20;
 
// chiamata ("Hello!")
$myClass->sayHello();
 
$anotherClass = new AnotherClass();
 
// stampa (10)
$anotherClass->a; // notare che non è stata influenzata dalla modifica =20
 
// chiamata ("Hello!")
$anotherClass->sayHello();

Public Protected Private

Tramite l’utilizzo delle keyword – public – protected – private – (indicatori di visibilità) possiamo definire la visibilità delle proprietà e dei metodi di una classe, in particolare

public
– interno della classe stessa: accessibile/modificabile
– esterno della classe: accessibile/modificabile
– interno classe che la ereditano (extends): accessibile/modificabile

protected
– interno della classe stessa: accessibile/modificabile
– esterno della classe: non accessibile (Fatal Error)
– interno classe che la ereditano (extends): accessibile/modificabile

private
– interno della classe stessa: accessibile/modificabile
– esterno della classe: non accessibile (Fatal Error)
– interno classe che la ereditano (extends): non accessibile


class MyClass {
         
        // proprietà
        protected $a = 10;
         
        // metodi
        protected function sayHello() {
                echo "Hello!";
        }
 
}
 
class AnotherClass extends MyClass {
 
        public function sayHelloAgain() {
                $this->sayHello();
        }
 
}
 
$anotherClass = new AnotherClass();
 
// stampa "Hello!"
$anotherClass->sayHelloAgain();

//  Fatal Error
echo $myClass->a;
 
// Fatal Error
$myClass->sayHello();

// Fatal error
$anotherClass->sayHello();

// Fatal Error
$anotherClass->sayHelloAgain();

Overriding o Ridefinizione

Con l’Overriding o ridefinizione estendiamo una classe al fine di sovrascrivere il vecchio metodo con uno nuovo:


class A {
        public function sayHello() {
                echo "Hello!";        
        }
}
 
class B extends A {
        public function sayHello() {
                echo "Ciao Ciao!";    
        }
}
 
$b = new B();
 
// stampa "Ciao Ciao!"
$b->sayHello(); // il metodo con lo stesso nome più nuovo prende il posto di quello vecchio.

Overriding – parent –

Utilizzando la keyword – parent:: – possiamo sommare il risultato di due metodi con lo stesso nome


class A {
 
        public function sayHello() {
                echo "Hello!";        
        }
 
}
 
class B extends A {
 
        public function sayHello() {
                parent::sayHello();
                echo "Ciao Ciao!";    
        }
 
}
 
$b = new B();
 
// stampa "Hello! Ciao Ciao!"
$b->sayHello(); // il risultato è la somma dei due metodi

Un esempio di parent sul costruttore


class A {
        public function __construct($a, $b, $c, $d) {
                $this->a = $a;
                $this->b = $b;
                $this->c = $c;
                $this->d = $d;
        }
         
        // metodi...
 
}
 
class B extends A {
        public function __construct($a, $b, $c, $d, $e) {
                parent::__construct($a, $b, $c, $d);
                $this->e = $e;
        }
         
        // metodi...
 
}
 
$b = new B(10, 20, 30, 40, 50);
 
echo $b->a;  // stampa 10
echo $b->b;  // stampa 20
echo $b->c;  // stampa 30
echo $b->d;  // stampa 40
echo $b->e;  // stampa 50

Come funziona?
1. Creo un’istanza basata sulla classe B ‘$b = new B(10, 20, 30, 40, 50);’ ed inviando dei valori
2. ‘class B extends A’ invoca il costruttore della classe padre ‘parent::__construct($a, $b, $c, $d);’
3. La classe parent assegna con il suo costruttore i valori ricevuti alle variabili ‘function __construct($a, $b, $c, $d){$this->a = $a;’
4. echo visualizza i valori delle variabili

Impedire Overriding di Metodi e Classi – final –

Per garantire stabilità alle nostre gerarchie si può impedire l’Overridind dei metodì crucialiper il funzionamento della nostra applicazione.
Ad esempio potremo impedire la ridefinizione della classe per il collegamento al database o il parsing dei documenti.
Per fare questo utilizzaremo la keyword – final –

Per i metodi:


class MyClass {
        final public function connect_to_my_db() {
                // implementazione...
        }
         
        final public function parse_my_xml_doc() {
                // implementazione...
        }
         
        final public function sayHello() {
                echo "Hello!";
        }
}
 
$myClass = new MyClass();
 
// stampa "Hello!"
$myClass->sayHello();

// Fatal Error perchè sayHello() è stata dichiarata - final -
// NON POSSO FARE OVERRIDING
class AnotherClass extends MyClass {
        public function sayHello() {
                echo "Hello!";
        }
 
}

Per le classi:


final class MyClass {
        // implementazione...
} 

// Fatal Error: lass AnotherClass may not inherit from final class (MyClass)
lass AnotherClass extends MyClass {
        // implementazione...
}

Il mio sito ufficiale:
www.lucedigitale.com

Bibligrafia:
www.html.it/pag/18341/creare-le-classi/
www.html.it/pag/18353/impedire-loverriding-final/

By |PHP, Web Design|Commenti disabilitati su PHP Lezione Itermedia – Oggetti Classi Proprietà Metodi Istanze Costruttori Ereditarietà