رفتن به مطلب

درخواست راهنمایی در مورد شی گرائی php


پست های پیشنهاد شده

سلام

کد ها :


<?php
class Emailer {
private $sender;
private $recipients;
private $subject;
private $body;
public function __construct($sender) {
$this->sender = $sender;
$this->recipients = array();
}
public function AddRecipients($recipient) {
array_push($this->recipients, $recipient);
}
public function SetSubject($subject) {
$this->subject = $subject;
}
public function SetBody($body) {
$this->body = $body;
}
public function SendEmail() {
foreach ($this->recipients as $recipient) {
$result = mail($recipient, $this->subject, $this->body, "From: {$this->sender}\r\n");
if ($result) {
echo "Mail successfully sent to {$recipient}<br/>" . PHP_EOL;
}
}
}
}
?>

الان در کد بالا ، چرا داخل تابع __construct از کدهای زیر استفاده شده است ؟


$this->sender = $sender;
$this->recipients = array();

sender چیست و چه فرقی با sender$دارد ؟ مگر میشه دو اسم هم نام داشته باشیم ؟

یا در تابع AddRecipients :


array_push($this->recipients, $recipient);

لینک به ارسال

سلام. ببینید ما وقتی یک کلاس داریم به دو روش می توانیم یک آبجکت یا شی از اون درست بکنیم.

راه اول این هست که یک نسخه از اون درست بکنیم بدون اینکه مقداری به اون ارسال کنیم.

مثلا


$myEmailer = new Emailer;

اما توی تعریف تابع کنستراکتور گفته که به روش اول نباید باشه و حتما باید یک آرگومان داشته باشه در نتیجه معلوم میشه که من موقع تعریف شی از اون کلاس مجبورم یک آرگومان به اون ارسال کنم و در واقع باید نام کلاس رو به صورت یک تابع فراخوانی کنم. یعنی :


$myEmailer = new Emailer($sender);

امیدوارم متوجه موضوع شده باشید.

همچنین در مورد $recipients هم باید بگم که اون جایی که $this در قبل اون اومده به متغییر تعریف شده در کلاس اشاره داره و جایی که بدون this هست یعنی آرگومان ارسالی به تابع.

لینک به ارسال
سلام. ببینید ما وقتی یک کلاس داریم به دو روش می توانیم یک آبجکت یا شی از اون درست بکنیم. راه اول این هست که یک نسخه از اون درست بکنیم بدون اینکه مقداری به اون ارسال کنیم. مثلا
 $myEmailer = new Emailer; 

اما توی تعریف تابع کنستراکتور گفته که به روش اول نباید باشه و حتما باید یک آرگومان داشته باشه در نتیجه معلوم میشه که من موقع تعریف شی از اون کلاس مجبورم یک آرگومان به اون ارسال کنم و در واقع باید نام کلاس رو به صورت یک تابع فراخوانی کنم. یعنی :

 $myEmailer = new Emailer($sender); 

امیدوارم متوجه موضوع شده باشید. همچنین در مورد $recipients هم باید بگم که اون جایی که $this در قبل اون اومده به متغییر تعریف شده در کلاس اشاره داره و جایی که بدون this هست یعنی آرگومان ارسالی به تابع.

سلام خیلی از شما ممنونم

1- با اینکه سوالم در حوزه ساخت یک نمونه از کلاس نبود اما در این زمینه هم قاطی کردم

من میام یک نمونه از کلاس میسازم :


$myEmailer = new Emailer;

حالا بعدش به هر تابعی که بخوام دسترسی داشتم باشم مثلا به صورت زیر عمل میکنم :


$myEmailer-> --constructor($sender) ;

میشه به جای کد شما از کد های بالا استفاده کرد ؟

2- در مورد کد this-> :

در کد اصلی که در بالا هست ، مگه میشه دو مقدار هم نام داشته باشیم ؟ مثل :


$this->sender = $sender;

.................................

مثلا من در c# یک کلاس محاسبه مساحت و محیط مستطیل رو به صورت زیر ایجاده کرده ام :

6822143665395025531_class.png

مثلا اگر کد بالا بخواد به php تبدیل بشه ، در تابع s به صورت زیر میشه ؟ :


this->x=$a
this->y=$b

ویرایش شده توسط site
لینک به ارسال

در تکمیل صحبتهای پارسی گروپ عزیز:

ببینید در php برای اشاره به یک خاصیت یا property از کلمه this$ استفاده میشه که این this$ اشاره میکنه به کلاس جاری که در کلاس مورد نظر شما در تابع construct__ اومده 2 تا خاصیت کلاس رو مقدار دهی اولیه(initialize) کرده به همین دلیل شما 2 تا مقدار sender$ میبینین که یکی پارامتر خود تابع هست که در scope همون تابع قابل دسترسی هست و دیگری this->sender$ هست که خاصیت عمومی کلاس هست و در کل کلاس میشه بهش دسترسی داشت

در php شما نیاز نیست تابع construct رو به صورت زیر فراخوانی کنید

$myEmailer-> --constructor($sender) ;

وقتی شما یک نمونه از کلاس Emailer میسازید در پس زمینه تابع construct__ اجرا میشه

و شما مقدار sender$ رو به صورت زیر مقدار دهی میکنید

$mail = new Emailer('example@email.com');

لینک به ارسال

در تکمیل صحبتهای پارسی گروپ عزیز:

ببینید در php برای اشاره به یک خاصیت یا property از کلمه this$ استفاده میشه که این this$ اشاره میکنه به کلاس جاری که در کلاس مورد نظر شما در تابع construct__ اومده 2 تا خاصیت کلاس رو مقدار دهی اولیه(initialize) کرده به همین دلیل شما 2 تا مقدار sender$ میبینین که یکی پارامتر خود تابع هست که در scope همون تابع قابل دسترسی هست و دیگری this->sender$ هست که خاصیت عمومی کلاس هست و در کل کلاس میشه بهش دسترسی داشت

در php شما نیاز نیست تابع construct رو به صورت زیر فراخوانی کنید

$myEmailer-> --constructor($sender) ;

وقتی شما یک نمونه از کلاس Emailer میسازید در پس زمینه تابع construct__ اجرا میشه

و شما مقدار sender$ رو به صورت زیر مقدار دهی میکنید

$mail = new Emailer('example@email.com');

سلام خیلی ممنون

بعد از ساختن یک نمونه از کلاس ، فقط و فقط تابع construct__ اجرا میشه ؟!!؟ پس بقیه توابع چطور ؟

الان php از کجا میفهمه که کد زیر مربوط به آرگومان تابع construct__ هست ؟


$mail = new Emailer('example@email.com');

تو کد بالا نه نامی از تابع برده شده و نه نامی از آرگومان

برای سایر توابع چگونه است ؟ میشود به عنوان مثال از کد دوم شما استفاده کرد ؟

لینک به ارسال

ببینید شما اینطوری درست متوجه نمیشید بهتره یه آموزش رو دنبال کنید تا همه چیز رو به صورت مرحله ای براتون توضیح بده هر چیزی رو که نفهمیدید اینجا بپرسید.

توابع دیگه ی کلاس رو باید بعد از ایجاد آبجکت از اون کلاس به صورت زیر فراخوانی کنید:


$myObj = new Emailer("example@mail.com")
$myObj->AddRecipients($recipient);

لینک به ارسال

سلام خیلی ممنون

بعد از ساختن یک نمونه از کلاس ، فقط و فقط تابع construct__ اجرا میشه ؟!!؟ پس بقیه توابع چطور ؟

الان php از کجا میفهمه که کد زیر مربوط به آرگومان تابع construct__ هست ؟


$mail = new Emailer('example@email.com');

تو کد بالا نه نامی از تابع برده شده و نه نامی از آرگومان

ببینین مفسر php تعریف شده که وقتی یک شیی از کلاس ساخته new میشه یعنی بعد از تخصیص حافظه برای اون شیی باید تابع construct__ رو اجرا کنه و پارامتر example@email.com رو به تابع construct__ پاس میده

برای سایر توابع چگونه است ؟ میشود به عنوان مثال از کد دوم شما استفاده کرد ؟

سایر توابع رو شما خودتون اجرا میکنید


$myObj = new Emailer("example@mail.com")
$myObj->AddRecipients($recipient);

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...