php – functii cu numar variabil de parametri

Pe langa faptul ca parametrii unei functii php pot avea valori predefinite, precum in exemplul urmator :

<?php
    function say( $what = "nothing" )
    {
        echo $what . "\n";
    }
   
    say( "dude" );
    say( );
?>

mai exista posibilitatea de a defini si functii cu numar variabil de parametri in felul urmator:

<?php
    function say( )
    {
        for ( $i = 0; $i < func_num_args(); $i++ )
            echo func_get_arg( $i ) . " ";
        echo "\n";
    }

    say( "test", "another test" );
?>

In cazul cand se alege aceasta modalitate de a pasa parametrii, accesul la parametri se face cu ajutorul functiilor:

Asta inseamna ca putem defini o functie ce poate lua un numar de parametri intr-un caz si alt numar de parametri in alt caz.

Un exemplu practic unde se poate folosi acest feature al php-ului este la definirea functiilor de SET / GET in clase pentru accesul la anumite date private din clasa respectiva. O functie de SET este o functie ce seteaza o valoare privata in clasa, iar o functie de GET este una care ia valoarea unui membru privat din clasa. Se observa ca functia de set trebuie sa ia cel putin un parametru – fiind noua valoare a membrului

    ///set new value
    public function setValue( $newvalue );

iar functia de GET nu ia nici un parametru, dar trebuie sa returneze valoarea ceruta :

    ///get value
    public function getValue( );

la prima vedere aceste functii pot trai si separat si independente, dar exista posibilitatea sa le comansam in una singura cu ajutorul functiilor cu numar variabil de parametri.
Exemplu:

<?php
    /// definesc clasa A
    class A {
        /// membru privat $_id
        private $_id = 0;
       
        /// functie get/set cu numar variabil de parametri
        public function id( ) {
            if ( func_num_args( ) == 0 ) {
                //daca nu este pasat nici un parametru
                //se returneaza valoarea $_id
                return $this->_id;
            } else {
                //altfel, setez $_id cu primu parametru
                //(restul parametrilor se ignora)
                $this->_id = func_get_arg( 0 );
                return TRUE;
            }
        }
    }
   
    //creez o instanta a clasei A
    $a = new A();
   
    //apelez functia id() ca SET
    $a->id( 5 );
   
    //apelez functia id() ca GET
    echo $a->id();
?>

Prin aceasta modalitate, vom defini in clasa doar o singura functie ceea ce va scadea numarul functiilor declarate in clasa si va face clasa mai usor utilizabila.

atat.

vi config/options

Hai… daca stii ce e linux trebuie sa stii ce e vi = cel mai tare editor ( asta in cazul ca mai iei mana de pe mouse si afli ca mai ai si o tastatura in fata ), doar ca nu e foarte prietenos cu incepatorii si are multe optiuni ne-intuitive. Aici sunt cateva de care ma lovesc eu mai des.

  • afiseaza numarul liniei cu
    :set number
  • numarul de spatii atunci cand se apasa TAB:
    :set tabstop=4
  • autoindent – cand apesi enter, cursorul nu se duce la inceput de linie, ajuta la tabularea programului
    :set autoindent
  • incsearch – selecteaza textul care seamna cu patternul de cautare in timp ce se tasteaza
    :set incsearch
  • hlsearch – selecteaza toate aparitiile a patternului ce a fost cautat
    :set hlsearch

acum am un editor cat de cat mai bun si cu cate mai multe posibilitati. Pentru a face aceste setari permanente, editam fisierul ~/.vimrc si adaugam comenzile ce se vor executa de fiecare data cand se porneste vi-ul :

:set number
:set tabstop=4
:set autoindent
:set incsearch
:set hlsearch

Hint: acest continut se poate pune in fisierul /etc/skel/.vimrc astfel ca toti ceilalti utilizatori ce vor fi creati sa benefecieze de aceste setari by default. ( /etc/skel = e folderul default care se copie in home-ul noului utilizator care se creaza )

Si acum ceva optiuni de a lucra cu vi :

  • goto la linia numarul yyy astfel “:yyy”, exemplu:
    :231
    :0 = prima linie din fisier
    :$ = ultima linie din fisier
  • Cauti ceva prin fisier cu sintaxa : “[/|?]patern” , unde / = inainte, iar ? = inapoi
    /printf
    ?#include

    se foloseste tasta “n”(inainte)/”N”(inapoi) pentru a gasi urmatoarul patern

  • altceva?… google’it :)

atat.