თქვენ იცით რაღაც შესახებ PHP- ში. PHP: ანონიმური ფუნქციები

ვიკიპედია ამბობს, რომ ანონიმური ფუნქცია არის ფუნქცია, რომელიც შეიძლება არსებობდეს იდენტიფიკატორის გარეშე. ჟღერს საკმაოდ საინტერესო! ამ გაკვეთილში, მე გაჩვენებთ რამდენიმე მაგალითს, თუ როგორ შეგიძლიათ შექმნათ და გამოიწვიოს ფუნქცია არასტანდარტული მეთოდებით.

დავიწყოთ ერთდროულად მაგალითები:

ფუნქციის ტესტი ($ VAR) (ECHO "ეს არის $ var")

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

$ f \u003d "ტესტი"; $ F ("ცვლადი ფუნქცია");

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

ჩვენ შეგვიძლია გამოვიყენოთ ეს ტექნიკა oop. მაგალითი php.net:

კლასი Foo (ფუნქციის ცვლადი () ($ name \u003d "ბარი"; $ \u003e\u003e $ სახელი (); // ეს მოუწოდებს ბარი () მეთოდი) ფუნქციის ბარი (echo "ეს არის ბარი") $ foo \u003d ახალი foo (); $ Funcname \u003d "ცვლადი"; $ foo -\u003e $ funcname (); / / ეს მოუწოდებს $ foo-\u003e ცვლადი ()

ეს კონცეფცია საკმაოდ საინტერესოა. ეს შეიძლება გამოყენებულ იქნას callbacks, მხატვრული მაგიდები და ასე შემდეგ.

ახლა მე შევეცდები, რომ გაგიცნოთ რა ანონიმური თვისებებია:

$ input \u003d array (1, 2, 3, 4, 5); $ Output \u003d array_filter ($ შეყვანის, ფუნქცია ($ v) ($ v\u003e 2));

ფუნქცია ($ V) (დაბრუნება $ v\u003e 2;) ეს არის ანონიმური ფუნქცია. ჩვენ ასევე შეგვიძლია მივცეთ მას, რომ მომავალში გამოიყენოთ ცვლადი.

$ max \u003d ფუნქცია ($ v) (დაბრუნების $ v\u003e 2;); $ input \u003d array (1, 2, 3, 4, 5); $ Output \u003d array_filter ($ შეყვანის, $ მაქს);

ახლა მოდით გაეცნოთ ახალი გამოყენების საკვანძო სიტყვას. ჩვენ დავწერეთ სხვა ანონიმური ფუნქცია ამისთვის (მუშაობს PHP 5.3):

$ max_comp \u003d ფუნქცია ($ max) (დაბრუნების ფუნქცია ($ v) გამოყენება ($ max) ($ v\u003e $ max;);); $ input \u003d array (1, 2, 3, 4, 5); $ Output \u003d array_filter ($ input, $ max_comp (2));

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

აქ არის კიდევ ერთი მაგალითი მარტივი:

$ string \u003d "Hello World!"; $ დახურვის \u003d ფუნქცია () გამოყენება ($ string) (echo $ string;); $ დახურვა ();

როგორც მე ვთქვი, ცვლადები, რომ ჩვენ გვინდა გამოვიყენოთ (გლობალური მასშტაბიდან) ასეთ ფუნქციებში, უნდა გადაეცეს გამოყენების გზით. მნიშვნელოვანია აღინიშნოს, რომ მხოლოდ ღირებულება გადაცემულია, ასე რომ, თუ გსურთ შეცვალოთ გადაცემული ცვლადი და გვინდა, რომ შეიცვალოს ანონიმური ფუნქციის გარეთ, გადარიცხოს მნიშვნელობა მისამართზე:

$ x \u003d 1; $ დახურვის \u003d ფუნქცია () გამოყენება (& $ x) (++ $ x;); Echo $ x "
"$ დახურვა (); echo $ x."
"$ დახურვა (); echo $ x."
";

ამ მაგალითში ჩვენი მეთოდი ცვლის $ x ცვლადის შინაარსს თითოეული ზარის ანონიმური ფუნქციით. თუ ჩვენ არ გვქონდა ცვლადი მისამართი, და ჩვენ შევძელით ცვლადი სამი 1.

"დახურვის" ჭეშმარიტი სილამაზე ის არის, რომ ეს არ არის გლობალური სახელთა სივრცე. როგორც კი ანონიმური ფუნქცია შესრულდა აქცია, მასში გამოყენებული ყველა ცვლადი ავტომატურად განადგურებულია.

გამარჯობა ყველას და დღეს ჩვენ ვისაუბრებთ რა არის ანონიმური ფუნქციები PHP- ში და სად გამოიყენოთ ისინი.

ანონიმური ფუნქციებიან განსხვავებულად ლამბდა ფუნქციები - ეს არის ფუნქციები, რომლებსაც არ აქვთ სახელი.

ჩვეულებრივი ფუნქციის მაგალითი

ფუნქცია funame ($ txt) (
Echo "ჩემი ტექსტი:" $ txt;
}

$ Func \u003d "funame";
$ Func ("ჩემი ტექსტი");
?>

ჩვენ გვყავს ფუნქცია, რომელიც იღებს ერთი პარამეტრი. შემდეგ ჩვენ ვწერთ ფუნქციის სახელს ცვლადი და მოვუწოდებთ მას. არაფერი უჩვეულო. -ში თითო ეს სტილი უფრო გამართლებულია.

კლასი myclass (
ფუნქციის ბარი ()
// კოდი
}
}

$ CLASS \u003d ახალი MyClass ();
$ Func \u003d "ბარი";
$ კლასი -\u003e $ func ();
?>

ანონიმური ფუნქციები

თუ თქვენ იცნობთ ანონიმურ ფუნქციებს ენაზე JavaScript., მაშინ გესმით, რატომ არის საჭირო ისინი, და თუ არა, მაშინ წაიკითხეთ.

გამოიწვიოს ჩვენი ანონიმური ფუნქცია სადღაც პროგრამის კოდზე, ჩვენ შეგვიძლია მივანიჭოთ ცვლადი

$ Func \u003d ფუნქცია () (
// კოდი
};

$ func ();
?>

გაითვალისწინეთ, რომ ბოლოს ღირს ; იმიტომ რომ ჩვენ ფუნქციონირებს ცვლადი ღირებულების მინიჭება. მაგრამ ყველა მარილი არ არის, მაგრამ იმ ფაქტზე, რომ ჩვენ შეგვიძლია გამოვიყენოთ ეს ფუნქციები callback ფუნქციები. Მაგალითად:

$ Val \u003d array_filter ($ შეყვანის, ფუნქცია ($ v) (დაბრუნება $ v\u003e 2;);
?>

გამოიყენეთ სიტყვით

კიდევ ერთხელ, თუ იცით JavaScript.ეს არ იქნება პრობლემა თქვენთვის. სიტყვა სარგებლობა საშუალებას გაძლევთ გამოიყენოთ მიღება დახურვა. მასთან ერთად, ჩვენ შეგვიძლია მივიღოთ გარე ცვლადები.

$ Mx \u003d ფუნქცია ($ high_val) (
დაბრუნების ფუნქცია ($ VAL) გამოყენება ($ high_val) (
დაბრუნება $ val\u003e $ high_val;
};
};

$ i \u003d array (1, 2, 3, 4, 5, 6, 7);
$ O \u003d array_filter ($ input, $ max_comp (2));
?>

აქ ჩვენ შიგნით ვართ ლამბდა ფუნქციები ჩვენ ვიყენებთ გლობალურ ცვლადს high_val. ასე რომ შესაძლებელი იყო, ჩვენ უნდა შემდეგ სიტყვა ფუნქცია. და პარამეტრების ფრჩხილებში წერენ სარგებლობა და გაიაროს გარე ცვლადი სახელი, რომელიც ჩვენ გვინდა გამოვიყენოთ ფუნქციის კოდი.

თუმცა, ამ გზით ვერ შევძლებთ ჩვენი გლობალური ცვლადის მნიშვნელობას. ამისათვის თქვენ უნდა მიუთითოთ ნიშანი მისი სახელით. &

$ სახელი \u003d "ბრაიან";
$ setName \u003d ფუნქცია ($ n) გამოყენება (& $ სახელი) (
$ name \u003d $ n;
};

$ setName ("დავით");
Echo $ სახელი;
?>

დასკვნა

ასე რომ დღეს თქვენ შეიტყო რა არის ანონიმური ფუნქციები PHP- ში და როგორ გამოიყენოთ ისინი. Წარმატებები!

ფუნქცია შეიძლება გადაეცეს ცვლადს, ისევე როგორც ჩვეულებრივი ღირებულებას. ამისათვის ფუნქციის სახელი უნდა გადაეცეს ცვლადს სიმებიანი სახით, მაგრამ ფრჩხილების გარეშე:

\\ n ";) $ my_func \u003d" foo "; // ახლა ჩვენ შეგვიძლია აწარმოოთ foo () ფუნქცია გამოყენებით $ my_func ცვლადი, რომელიც ინახავს სახელით მითითებული ფუნქცია, როგორც სიმებიანი $ my_func (); / Call foo () ფუნქცია?\u003e

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

ასე რომ, როგორც ზემოთ მოყვანილ მაგალითში, შეგიძლიათ მხოლოდ გარკვეული მომხმარებლების ფუნქციებთან ერთად. ჩამონტაჟებული ენის სტრუქტურები და ფუნქციები, როგორიცაა Echo, unset (), Isset () და სხვა მსგავსი რამ არ შეიძლება პირდაპირ ენიჭება ცვლადებს ისევე. მაგრამ თქვენ შეგიძლიათ გააკეთოთ თქვენი გადატანა ფუნქცია (wrapper) ისე, რომ ჩაშენებული ენის სტრუქტურების შეიძლება მუშაობა, როგორიცაა მომხმარებლის ფუნქციები.

ანონიმური ფუნქციები

ანონიმური ფუნქცია - ფუნქცია, რომელსაც არ გააჩნია საკუთარი სახელი, ზოგჯერ თქვენ შეგიძლიათ აკმაყოფილებდეს სხვა ფუნქციებს - ლამბდა ფუნქციას. ანონიმური მახასიათებლები შეიძლება გადაეცეს სხვა ფუნქციებს, როგორც არგუმენტებს ან ცვლას, როგორც ჩვეულებრივი ღირებულებები:

გაითვალისწინეთ მაგალითი, ფუნქციის განსაზღვრისას არის სემინოლონი, რადგან ანონიმური ფუნქცია არსებითად ღირებულია და ცვლადის ღირებულების მინიჭება, შემდეგ კი, როგორც ჩვეულებრივი ინსტრუქციები, პუნქტი მოოქროვილი.

ანონიმური ფუნქციები განსხვავდება იმით, რომ ისინი მხოლოდ იმ მომენტში შექმნიან, როდესაც აღსრულება მათთან ერთად, ასე რომ თქვენ შეგიძლიათ გამოიყენოთ ისინი მხოლოდ მათი განსაზღვრის შემდეგ: