سلام من بعضی وقت ها دیدم که مثلا یک فانکشن تو یک فانکشن دیگه تو کلاس هست ، برای مثال
$class->fun1()->fun2();
ساخت این به چه صورته ؟
$class->fun1()->fun2();
به این چیزی که شما بهش برخوردید به فارسی میگن متد های ذنجیره ای و چیز چرتی هم نیست و در جای خودش کاربرد داره .
به این صورت که هر متد از یک کلاس یک کاری رو روی آبجکت انجام میده (مثلا مقدار یک پراپرتی رو تغییر میده) و خودش رو برمیگردونه.
به کد زیر دقت کنید:
class Image{
protected $image;
public function crop(){
//crop $image
return $this;
}
public function resize(){
//resize $image
return $this;
}
public function filter(){
//filter $image
return $this;
}
public function get(){
readfile($image); //masalan
}
}
حتی ممکنه این فانکشن آبجکتی از نوع خودش برنگردونه و آبجکت دیگه ای رو برگردونه، اگر اونم دارای متد های ذنجیره ای باشه میتونین ازش استفاده کنید .
به کد زیر دقت کنید:
مثلا من میتونم اینطوری استفاده کنم:
$image = new Image();
$image->crop()->resize()->filter()->getSVG()->a()->b()->c()->get();
class Image{
protected $image;
public function crop(){
//crop $image
return $this;
}
public function resize(){
//resize $image
return $this;
}
public function filter(){
//filter $image
return $this;
}
public function getSVG(){
return new SVG($this->image); //masalan
}
public function get(){
readfile($this->image); //masalan
}
}
class SVG{
protected $svg;
public function a(){
//do something $svg
return $this;
}
public function b(){
//do something $svg
return $this;
}
public function c(){
//do something with $svg
return $this;
}
public function get(){
readfile($this->svg); //masalan
}
}
✋
@abdolrahman تست کردم ، ولی چیز چرتیه ، خب کاربر میتونی بدون اون هم دسترسی داشته باشه دیگه میاد میزنه
$class->fun2();
@abdolrahman مگه منظورتون این نیست
public function fun1()
{
return $this;
}
public function fun2()
{
echo 'Hello World';
}
$class->fun1()->fun2()
با سلام .ممکنه یه شی برگشت بده و حتی میتونیم متد اون شی رو بخونیم که دوست عزیز @abdolrahman نیز اشاره کردند.
مثلا:
class testClass {
var $bar = 'hi';
public function fun2(){
return "ok";
}
}
public function fun1(){
return new testClass();
}
var $ok = fun1()->fun2();
$class->fun1()->fun2();
به این چیزی که شما بهش برخوردید به فارسی میگن متد های ذنجیره ای و چیز چرتی هم نیست و در جای خودش کاربرد داره .
به این صورت که هر متد از یک کلاس یک کاری رو روی آبجکت انجام میده (مثلا مقدار یک پراپرتی رو تغییر میده) و خودش رو برمیگردونه.
به کد زیر دقت کنید:
class Image{
protected $image;
public function crop(){
//crop $image
return $this;
}
public function resize(){
//resize $image
return $this;
}
public function filter(){
//filter $image
return $this;
}
public function get(){
readfile($image); //masalan
}
}
حتی ممکنه این فانکشن آبجکتی از نوع خودش برنگردونه و آبجکت دیگه ای رو برگردونه، اگر اونم دارای متد های ذنجیره ای باشه میتونین ازش استفاده کنید .
به کد زیر دقت کنید:
مثلا من میتونم اینطوری استفاده کنم:
$image = new Image();
$image->crop()->resize()->filter()->getSVG()->a()->b()->c()->get();
class Image{
protected $image;
public function crop(){
//crop $image
return $this;
}
public function resize(){
//resize $image
return $this;
}
public function filter(){
//filter $image
return $this;
}
public function getSVG(){
return new SVG($this->image); //masalan
}
public function get(){
readfile($this->image); //masalan
}
}
class SVG{
protected $svg;
public function a(){
//do something $svg
return $this;
}
public function b(){
//do something $svg
return $this;
}
public function c(){
//do something with $svg
return $this;
}
public function get(){
readfile($this->svg); //masalan
}
}
✋
@afsharmahmoodian سلام ، اخه اونطوری طرف میتونی هر متدی که توی یک کلاس پابلیک هست رو صدا کنه
@abdolrahman
از پاسخ های کوتاه و اسپم بپرهیزید !!!!!!!!
از پاسخ های نا مرتبط به تخصصتون و راهنمایی های نا مناسب بپرهیزید !!!
مثلا من میخوام طرف تا وقتی که مقادیر رو درست وارد نکرده بود و شرطم true نبود نتونه به فانکشن helloWorld دسترسی داشته باشه
مثلا من میخوام طرف تا وقتی که مقادیر رو درست وارد نکرده بود و شرطم true نبود نتونه به فانکشن helloWorld دسترسی داشته باشه
@gomnam
به نظرم امکان نظر دادن زیر پست ها را اضاف کنید تا سوالات کوتاه که جواب نیستند را زیر پست بزارن
چون بیشتر سوالاتی که ایشون پرسیدند مرتبط بود
مثلن در stackoverflow
@ilianazari869
شما باید داخل فانکشن مقدار سنجی کنید و اگر true بود رو متغییر اعمال شه
مثلن یه متد public به نام setAge در کلاس دارید و یک متغییر private به نام age
باید داخل setAge ورودی این متد را اعتبار سنجی کنید که اگر سن بالاتر از 20 بود به متغییر age مقدار بده
یک متد getAge نیز بسازید که مقدار age برگردونه برای کلاس هایی که میخوان مقدار متغییر age را بگیرند
با این کار تنها متد setAge میتونه به این متغییر مقدار بده (مقداری که خودتون مجاز کردید) و تنها متد getAge میتونه مقدارش رو بخونه
@ilianazari869
دستورات کنترلی مثل شرط ها و حلقه ها ، مربوط به زمان اجرا هستند و نمیشه باهاشون توابع و کلاس ها رو دستکاری کرد .
(البته این تو همه زبان ها صدق نمیکنه ، مثلا vhdl اینطور نیست).
شما باید کاری رو که میخواهید تو کد خودتون هندل کنید.
مثلا اگر شرط برقرار بود کاری که میخواهید انجام بشه و true برگردونه ، اگر نبود false برگردونه.
یا میتونید از کلاس های کمکی و اینترفیس ها کمک بگیرید که برای این کار مناسبه .
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟