180 likes | 289 Views
Web Programming. Objects Defining objects Inheritance Sessions and session variables. برنامه نویسی شی گرا در PHP. PHP از ایجاد اشیاء پشتیبانی می کند. اما ابتدا باید یک کلاس ایجاد نمایید. <?php // Assume that the “ Person ” object has been previously defined. . .
E N D
Web Programming Objects Defining objects Inheritance Sessions and session variables
برنامه نویسی شی گرا در PHP • PHP از ایجاد اشیاء پشتیبانی می کند. • اما ابتدا باید یک کلاس ایجاد نمایید. • <?php • // Assume that the “Person” object has been previously defined. . . • $x = new Person; // creates an instance of the Person class (*no* quotes) • // The object type need not be “hardcoded” into the declaration. • $object_type = ‘Person’; • $y = new $object_type; // equivalent to $y = new Person; • $z = new Vehicle(‘Jaguar’,’green’); // creating an object and passing • // arguments to its constructor • ?>
تعریف کلاس • از کلمه کلیدی class به همراه اسم کلاس مورد نظر استفاده کنید. • از اسم stdClass استفاده نکنید. (رزرو شده است) • <?php • class Person • { • var $name; • function set_name($new_name) { • $this -> name = $new_name; • } • function get_name() { • return $this -> name; • } • } • از متغییر$this برای دسترسی به خواص و توابع شی جاری استفاده کنید. • این متغییر در داخل متد به شی صداکننده اشاره دارد.
تعریف کلاس (ادامه...) • توابع و خواص شی به سه صورت تعریف شوند: • 1- public: از خارج قابل دسترسی هستند. • 2- private: فقط از متدهای خود کلاس قابل دسترسی هستند. • 3- protected : فقط از متدهای خود کلاس و کلاسهای وارٍٍث قابل دسترسی هستند. • در اینجا نیز لازم نیست که از ابتدا نوع خاصیت مشخص گردد. • نوع خاصیت در حین استفاده تعیین می گردد. (مثل متغییرها ) • <?php • class Person • { • protected $name; • protected $age; • function set_name($new_name) { • $this -> name = $new_name; • } • function get_name() { • return $this -> name; • } • } • ?>
تخصیص توابع و خاصیتها • با استفاده از ->می توان به خواص و توابع دسترسی داشت. • <?php • $me = new Person; • $me -> set_name(‘Russ’); • $me -> print_name(); • $name = $me -> get_name(); • echo $me -> get_name(); • $age = 36; • $me -> set_age($age); • ?>
تعریف کلاس (ادامه...) • کلاسها می توانند با کلمه کلیدی const یک ثابت را تعریف کنند. • می توانند توابع و خواص استاتیک داشته باشند. (با استفاده از کلمه کلیدی static قبل از var یا اسم تابع) • می توانند جزء سازنده ومخرب داشته باشند. • توابع استاتیک نمی توانند از متغییر $this استفاده کنند. • نحوه استفاده از آنها نیز متفاوت است. • <?php • class HTMLtable { • static function start() { • echo “<table> \n”; • } • static function end() { • echo “</table> \n”; • } • } • HTMLtable::start(); • ?>
جزء سازنده و مخرب • اسم جزء سازنده باید حتما برابر __construct() باشد. • اسم جزء مخرب باید حتما برابر __ destructor() باشد. • <?php • class Person { • protected $name; • protected $age; • function __construct($new_name, $new_age) { • $this -> name = $new_name; • $this -> age = $new_age; • } • // . . . other functions here . . . • } • $p = new Person(‘Bob Jones’, 45); • $q = new Person(‘Hamilton Lincoln’, 67); • ?>
توارث • از کلمه کلیدی extends برای تعریف یک شی که از شی دیگری ارث بری می کند استفاده کنید. • <?php • class Employee extends Person { • var $salary; • function __construct($new_name, $new_age, $new_salary) { • $this -> salary = $new_salary; • parent::__construct($new_name, $new_age); • } • function update_salary($new_salary) { • $this -> salary = $new_salary; • } • $emp = new Employee(‘Dave Underwood’, 25, 25000); • ?>
توارث (ادامه ...) • جزء سازنده پدر فقط به صورت صریح قابل صدا زدن است. • به جای parent::__constructمی توان از Person::__construct نیز استفاده کرد، اما روش اول بهتر است. • استفاده از کلمه کلیدی self در هنگام اجرای متدهای هم اسم با متدهای پدر متداول است (self::method()); • می توان با استفاده از کلمه کلیدی instanceof نوع یک شی را چک کرد: • if ($p instanceof Employee) { • // do something here • }
مطالبی دیگر در مورد کلاسها • می توان برای اشیاء واسط تعریف نمود. این واسطها باید توسط فرزندان پیاده شوند (یا دوباره بارگذاری شوند). • کلمه کلیدی final باعث می شود که یک متد توسط فرزندان قابل تغییر نباشد. • class Person { • var $name; • final function get_name() { • return $this -> name; • } • }
مطالبی دیگر در مورد کلاسها • تابع class_exists()مشخص می کند که آیا یک کلاس وجود دارد یا نه؟ • تابع get_declared_classes()لیستی از کلاسهای تعریف شده را برمی گرداند. • $classes = get_declared_classes(); • می توان لیستی از متدهای یک کلاس را به طرق زیر پیدا کرد: • $methods = get_class_methods(Person); • $methods = get_class_methods(‘Person’); • $class = ‘Person’; • $methods = get_class_methods($class);
مطالبی دیگر در مورد کلاسها • یک آرایه از متغییرهای دارای مقدار پیش فرض کلاس را بر می گرداند. • get_class_vars($object); /* gets an associative array that maps • property names to values (including • inherited properties), but it *only* • gets properties that have default • values (those initialized with • simple constants) */ • یک مقدار boolean برمی گرداند. • is_object($object); // returns a boolean value • کلاسی که شی به آن تعلق دارد را برمی گرداند. • get_class($object); /* returns the class to which an object • belongs */ • یک مقدار boolean برمی گرداند. • method_exists($object, $method); // returns a boolean value • لیستی از متغییرهای دارای مقدار شی را بر می گرداند. • get_object_vars($object); /* returns an associative array • mapping properties to values (for • those values that are set (i.e. • not null) */
نامگذاری کلاسها • برای نامگذاری کلاسها از __ در ابتدای اسم استفاده نکنید. • اسامی زیر توسط PHP رزرو شده اند: • __sleep() • __wakeup() • __get() • __set()
نشستهای PHP • وقتی که کاربر از یک صفحه به صفحه دیگری می رود، نه HTML و نه وب سرور به صورت پیش فرض اطلاعات وارد شده در صفحه قبلی را ذخیره نمی کنند. لذا نوشتن صفحاتی که به هم وابسته هستند کمی مشکل است. • نشست در این مورد کمک می کند تا داده های وارد شده توسط کاربر نگهداری شوند. • می توان از متغییرهای نشست برای ذخیره کردن اطلاعات استفاده کرد. ( مثلا در سبد خرید اینترنتی) • وقتی که یک نشست شروع می شود سرور اطلاعات وارد شده توسط کاربر را در یک شناسه نشست ذخیره می کند. این اطلاعات هنگام باز کردن یک صفحه جدید توسط مرورگر استفاده می شوند. • می توان ID نشست را توسط کوکی ارسال نمود یا آنرا به رشته URL الصاق نمود. • نشستها اطلاعات را به صورت موقت نگهداری می کنند. اگر می خواهید در دفعات بعدی از این اطلاعات استفاده کنید از کوکیها یا پایگاه داده استفاده کنید.
نشستهای PHP • برای شروع نشست از session_start() در ابتدای کد PHP استفاده کنید. • <?php • session_start(); • ?> • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" • "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> • <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> • <head> • <title>Session example</title> • </head> • <body> • <?php • include_once ('object.php'); // Includes definition of the Person class • $_SESSION['hello'] = 'Hello world'; • echo $_SESSION['hello'] . "<br/><br/>\n"; • $_SESSION['one'] = 'one'; • $_SESSION['two'] = 'two'; • $me = new Person("Russ", 36, 2892700); • $_SESSION['name'] = $me->get_name(); • echo "Testing " . $_SESSION['one'] .", " . $_SESSION['two'] . ", " . $me->get_number() . " . . .<br/>\n"; • ?> • <a href="27.php">date</a> • </body></html> view the output page
استفاده از متغییرهای نشست • می توان از متغییرهای یک نشست در صفحات دیگر نیز استفاده نمود. <?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Session example 2</title> </head> <body> <?php echo "Welcome to a new page ". $_SESSION['name'] . "!<br/>\n"; echo "Hope you enjoy your stay! <br/>"; ?> <p>Back to regular HTML text... </p> </body> </html> view the output page
More on session variables • در هر صفحه ای که به متغییرهای نشست قبلی نیاز دارید باید تابع session_start() را به ابتدای صفحه الحاق کنید. • با بستن مرورگر نشست نیز پایان می یابد. • تابع session_unset() تمام متغییرهای نشست را حذف می کند. • اگر می خواهید فقط یک متغییر را حذف کنید از تابع unset($var) استفاده کنید. • زمان پیش فرض برای مدت زمان اعتبار فایلهای نشست 24 دقیقه است اما می توان آنرا تغییر داد.
Deleting all session variables • <?php • session_start(); • ?> • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" • "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> • <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> • <head> • <title>Session example 3</title> • </head> • <body> • <?php • echo "Deleting all session variables using session_unset(); <br/>\n"; • session_unset(); • echo "Now the session variables are gone. <br/>\n"; • if (isset($_SESSION['name'])) • { echo $_SESSION['name'] . "<br/>\n"; } • else • { echo "Session variable is not here."; } • ?> • </body> • </html> view the output page