site

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

7 پست در این موضوع قرار دارد

سلام

کد ها :


<?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);

0

به اشتراک گذاری این پست


لینک به پست

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

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

مثلا


$myEmailer = new Emailer;

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


$myEmailer = new Emailer($sender);

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

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

2

به اشتراک گذاری این پست


لینک به پست

ارسال شده در (ویرایش شده)

سلام. ببینید ما وقتی یک کلاس داریم به دو روش می توانیم یک آبجکت یا شی از اون درست بکنیم. راه اول این هست که یک نسخه از اون درست بکنیم بدون اینکه مقداری به اون ارسال کنیم. مثلا
 $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
0

به اشتراک گذاری این پست


لینک به پست

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

ببینید در 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');

3

به اشتراک گذاری این پست


لینک به پست

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

ببینید در 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');

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

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

0

به اشتراک گذاری این پست


لینک به پست

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

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


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

2

به اشتراک گذاری این پست


لینک به پست

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

بعد از ساختن یک نمونه از کلاس ، فقط و فقط تابع 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);

2

به اشتراک گذاری این پست


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری