PHP 5.3 alpha1 – ცვლილებები ენაში

მაშ ასე, ცხოვრება წინ მიიწევს და რა თქმა უნდა ტექნოლოგიებიც ვითარდება… აგვისტოს დასაწყისსში გამოჩნდა PHP – ს ახალი 5.3 ალფა ვერსია რომელშიც ენის უმნიშვნელოვანესი გაუმჯობესებებია შეტანილი. თუმცა ამ ფაქტის შესახებ დაწერა ვერ მოვასწარი… ჯერ ქალაქში არ ვიყავი, შემდეგ კი ყველასათვის ის ავადსახსენებელი მოვლენები დაიწყო…

თუმცა, მიუხედავად ყველაფრისა ცხოვრება გრძელდება და მეც ვცდილობ დავუბრუნდე ჩვეულ რითმს, რასაც ამ მცირე მიმოხილვით დავიწყებ :)

მიმდინარე წლის დასაწყისში ენდი გუტმანსმა გააკეთა გარკვეული პროგნოზები თუ როგორი იქნებოდა ტექნოლოგიუირი 2008 წელი

გარკვეული პერიოდის შემდეგ Google – ს თანამშროლმელმა და ajaxian.com – ის რედაქტორმა, Dion Almaer – მა, დაწერა საპასუხო პოსტი – Andi Gutmans Predicts – ენდის პროგნოზების შესახებ… რომლის ბოლო აბზაციც თავად PHP – განვითარებასა და მომავალს ეხება:

I wonder what 2008 will be like for PHP, Andi. I have no doubt that it will continue to power a huge number of websites. But, what is PHP doing in 2008 to increase its share in the non-hacker-kiddie crowd? Is the Zend Framework going to compete with Rails and the like? How is PHP going to evolve? I want to be able to do richer DSLs with full open classes and meta-support.

გადაიდგა თუ არა რაიმე ნაბიჯები PHP – ს განვითარებისთვის? დიახ გადაიდგა, და ჩემის აზრით საკმაოდ მნიშვნელოვანი ნაბიჯები… ყველა PHP – ს მომხმარებელმა კარგად იცის თუ რამდენი სასარგებლო ფუნქცია და ბიბლიოთეკა გააჩნია ამ ენას. სწორედ ეს მზამზარეული დეტალები ქმნის პროგრამირების კომფორტს, თუმცა ამ დადებითი დეტალების მიღმა PHP როგორც ენა საკმაოდ შეზღუდულია. მეხუთე ვერსიაში განხორციელებული ნახტომი რომელიც მოიცავდა OOP – ს საგრძნობ გაუმჯობესებას მაინც არ არის საკმარისი იმისათვის რომ PHP – სგან უფრო მეტი არ მოვითხოვთ…

მაშ ასე რა ცვლილებებთან გვაქვს საქმე?

Namespace

ნეიმსპეისები, რომელიც პირველი PHP 5 – ის ალფა რელიზში იყო და შემდეგ უკვე გაუგებარი მიზეზების გამო რამდენიმე წლით გაქრა… ეს არის ძალიან, ძალიან სასარგებლო თვისება ენისა კოდის უკეთესი ორგანიზებისათვის. იგივე შესაძლებლობა გვხდება C# – ში, ანალოგიური სახელით და ასევე Java – ში პაკეტების სახელით.

Late Static Bindings და __callStatic()

სტატიკური გვიანი დაკავშირება. OOP – ს მცოდნეთათვის არ არის უცხო გვიანი დაკავშირების(Late Binding) კონცეფცია, და დამეთანხმებით რომ იგი მიეკუთვნება ობიექტზე ორიენტირებული პრინციპების ერთერთ უმნიშვნელოვანეს შესაძლებლობათა რიცხვს. PHP – ში გვიანი დაკავშირება აქამდე ვრცელდებოდა მხოლოდ ობიექტების იერარქიის კონტექსტში. ამიერიდან ეს უკვე შესაძლებელია სტატიკური მემკვიდრეობის კონტექსტშიც. ჩემის აზრით ენის ეს ახალი შესაძლებლობა ძალიან მნიშვნელოვანია.

ასევე ამ განახლების რიგს მიეუკთვნება ე.წ. ჯადოსნური(magic) __callStatic მეთოდის გამოჩენა… PHP 5 – ის მცოდნეთათვის არ არის უცხო __call ჯადოსნური მეთოდი რომელიც გამოიძახება არ არსებულ მეთოდზე მიმართვის შემთხვევაში, და იგი ძალიან მოქნილი მექანიზმია მსგავსი სიტუაციების კონტროლისათვის. __call მეთოდი მასიურად არის გამოყენებული PHP – ს SOAP გაფართოვებაში. ვისაც გიმუშავიათ ამ გაფართოვებასთან გამოცდილი გექნებათ აღნიშნული მეთოდის სიმძლავრე… თუმცა აქამდე ეს მეთოდი მხოლოდ ობიექტის კონტექსტში მუშაობდა და სტატიკურ კონტექსტში მისი გამოყენების არანაირი შანსი არ არსებობდა… ახალი ჯადოსნური __callStatic მეთოდით, რომელიც გამოჩნდა ამ განახლებაში უკვე კლასის სტატიკურ კონტექსტსაც გაცილებით უფრო მოქნილსა და სასარგებლოს გახდის.

Lambda functions and closures

ანონიმური ფუნქციები(closures) ეს არის ჩემის აზრით ერთერთი უმნიშვნელოვანესი დამატება ენისათვის, რაც ბევრად უფრო მეტ მოქნილობას შესძენს PHP – ს. არანაირად არ მეპარება ეჭვი რომ ენის ეს შესაძლებლობა ნებისმიერი გამოცდილი სკრიპტული ენის პროგრამისტის ხელში უმნიშვნელოვანესი ინსტრუმენტი იქნება. განსაკუთრებით სასიხარული ეს შესაძლებლობა იქნება ისეთი პროგრამისტებისათვის ვისაც აქვს JavaScript – თან ან Python – თან მუშაობის გამოცდილება.

თუმცა იგივე JavaScript – ისგან განსხვავებით, არსებობს რამდენიმე ისეთი დეტალი რაც ყურადღებას იმსახურებს… ეს გამოწვეულია ამ ენებს შორის არსებული სკოუპების იმპლემენტაციის განსხვავების გამო. ანუ PHP – ს ანონიმური ფუნქციის გარკვეულ სკოუპში აღწერისას ავტომატურად არ უზრუნველყოფს მის მშობელ სკოუპში აღწერილი ცვლადების ხილვადობას. ამისათვის გამოიყენება სპეციალური use კონსტრუქცია რომელშიც უნდა მოხდეს საჭირო ცვლადების მითითება:

   function replace_in_array ($search, $replacement, $array) {
     $map = function ($text) use ($search, $replacement) {
       if (strpos ($text, $search) > 50) {
         return str_replace ($search, $replacement, $text);
       } else {
         return $text;
       }
     };
     return array_map ($map, $array);
   }

ასევე საგულისხმოა კლასებში _ _invoke ჯადოსნური მეთოდის გამოჩენა. ეს მეთოდი ე.წ. callable object კონცეფციის ნაწილია. ქვემოთ მოყვანილ კოდში ნაჩვენებია ამ მეთოდის გამოყენების მაგალითი:

class Example {
  public function __invoke () {
    echo "Hello World!\n";
  }
}
$foo = new Example;
$foo ();

enjoy :)

ტეგები:

4 Responses to “PHP 5.3 alpha1 – ცვლილებები ენაში”

  1. ოთო says:

    ესეიგი, ფაქტიურად კურიოზია რა :) )
    გუშინწინ გამომადგებოდა ლამბდა ფუნქციები :) )

    კარგია კარგი :)

  2. nodarinodo says:

    გაუმარჯოს, შენ იმაზე იფიქრე, როდიდან გაიჩითება ვებ სერვერებზე..

    უკვე Stable ვერსიებიც გამოვიდა – 5.3.1 ამჟამად

  3. nodarinodo says:

    ჰოსტინგებზე უფ..

  4. BioHazard says:

    რამე ეგეთირომ იქნება მაშინიქნება რამე…

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class test {

      private int count;

      public int Count

      {

        set { count = value; }

        get { return count; }

      }

    }

დატოვე კომენტარი:

ქართული კლავიატურა, ჩართვა/გამორთვა კლავიშით "~"