تالار گفتمان nCIS.ir

نسخه‌ی کامل: اولین کلاس PHP ام رو نوشتم ...
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
صفحات: 1 2 3

ABZiko

سلام، دوستان بنده تونستم اولین کلاس خودم رو بنویسم، این کلاس برای مباحث ریاضی از جمله 4 عمل اصلی و جز صحیح هستش، می دونم خیلی جالب نیست ، پس مسخرم نکنید ... Big Grin Wink
یک مثال :
<?php

class Math {

    private static $result;
    private static $arr;
    private static $minusNumber;

    public static function showNumbers($number1,$number2){
        return 'Number 1 : '.$number1.'<br>Number 2 : '.$number2;
    }

    public static function plusNumbers($number1,$number2){
         return $number1+$number2;
    }

    public static function minusNumbers($number1,$number2){
        return $number1-$number2;
    }

    public static function timeNumbers($number1,$number2){
        return $number1*$number2;
    }

    public static function divideNumbers($number1,$number2){
        if($number2 == 0){
            return "Your second argument is 0 !";
        }
        else{
            return $number1/$number2;
        }
    }

    public static function intNumber($justNumber){
        if($justNumber > 0){
            self::$arr=explode('.',$justNumber);
            return '['.$justNumber.'] = '.self::$arr[0];
        }
        elseif($justNumber < 0){
            self::$arr=explode('.',$justNumber);
            self::$result = self::$arr[0] - 1;
            return '['.$justNumber.'] = '.self::$result;
        }
        else{
            return "Your number is 0 !";
        }
    }

    public static function absNumber($justNumber){
        if($justNumber == 0){
            return "Your number is 0 !";
        }
        else{
            if($justNumber > 0){
                return "Your ABS number from ".$justNumber." is : ".$justNumber;
            }
            else{
                self::$minusNumber = $justNumber * -1;
                return "Your ABS number from ".$justNumber." is : ".self::$minusNumber;
            }
        }
    }

    public static function logNumber($justNumber){
        if($justNumber < 0){
            return "Your number is negative !";
        }
        else{
            return log($justNumber);
        }
    }

    public static function powerNumber($number1,$number2){
        return pow($number1,$number2);
    }

    public static function roundNumber($justNumber){
        return 'Your rounded number from '.$justNumber.' is : '.round($justNumber);
    }

    public static function sinDegree($justDegree){
        return sin($justDegree);
    }

    public static function cosDegree($justDegree){
        return cos($justDegree);
    }

    public static function tanDegree($justDegree){
        return tan($justDegree);
    }

    public static function cotDegree($justDegree){
        return tan(M_PI_2 - rad2deg($justDegree));
    }

    public static function arcSinDegree($justDegree){
        return asin($justDegree);
    }

    public static function arcCosDegree($justDegree){
        return acos($justDegree);
    }

    public static function arcTanDegree($justDegree){
        return atan($justDegree);
    }

    public static function arcCotDegree($justDegree){
        return pi()/2 - atan($justDegree);
    }

    public static function diffSin($justDegree){
        return cos($justDegree);
    }

    public static function diffCos($justDegree){
        return -1 * sin($justDegree);
    }

    public static function diffTan($justDegree){
        return 1 + pow(tan($justDegree),2);
    }

    public static function diffCot($justDegree){
        return -(1 + pow(tan(M_PI_2 - rad2deg($justDegree)),2));
    }

    public static function secDegree($justDegree){
        return 1 / cos($justDegree);
    }

    public static function cosecDegree($justDegree){
        return 1 / sin($justDegree);
    }

}
این کل کلاس و :
<?php

require_once('Math.php');
echo Math::roundNumber(420.55);

?>
این هم یک مثال با کلاس ...

موارد اضافه شده :
لوگاریتم در مبنا 10
توان
گرد کردن اعداد به نزدیک ترین عدد صحیح
Sin, Cos, Tan, Cot
Arc Sin, Arc Cos, Arc Tan, Arc Cot
مشتق Sin, Cos, Tan, Cot
سکانت و کسکانت

دوستان لطفا اگر استفاده می کنند، یک چک بکنند که نتایج توابع درست هست یا نه و لطفا اطلاع بدن که درستش کنم، (فقط نوشتم و چک نکردم) ... ممنون

از دوستان دو تا درخواست دارم، لطفا اول یک نگاه بهش بندازین ببینید بهش کلاس می گن یا نه ...
و این که مشکلاتش رو هم بگید ممنون می شم ...
تشکر
آفرین. یک ایراد کوچیکی که داره اینه که توی متود showNumbers دو تا echo داره و استاندارش اینه که هر تابعی یک دونه echo یا return داشته باشه، و باز بهتره که return باشه و اسم تابع رو صدا بزنید و echo کنید نه اینکه توی خود تابع echo کنید.
یک ایراد ریاضی وار دیگه هم متود divideNumbers هستش که بهتره یک چک بکنی اول آرگوگان دوم رو که صفر نباشه و اگر بود return false کنی، چون مخرج کسر نباید صفر باشه.

ABZiko

ممنون، حتما اصلاحش می کنم ...
لزومی نداره یکسری متغیر سراسری برای کل کلاس تعریف بکنی وقتی که هر متد داره ورودی های خودش رو میگیره ، اگه متغیری که میخوای استفاده کنی برای همه یا چندتا از متدها مورد نیاز هستش سراسری تعریف بکن ... سطح دستری متغیرها رو هم باید تعیین کنی public گذاشتن همه ی متغیرها با مفهوم کپسوله سازی تو شئ گرا جور در نمیاد ... یه کلاس مثل Math بیشتر جنبه ی اینو داره که میخوایم یکسری توابع رو درون ساختاری منظم بچینیم و بهش اسمی بدیم و ازش درون پروژه هرجا خواستیم استفاده کنیم ممکنه زیاد ازش استفاده بشه لزومی هم نداره اینطوری استفاده بشه :
$om = new Math(); $om->something();
بهتره متدهاشو کلا" static بگیری

ABZiko

ممنون، حتما تغییرشون می دم ...
یک سوال داشتم ازتون، این یعنی چی :
مفهوم کپسوله سازی تو شئ گرا
بطور خلاصه یعنی مخفی سازی داده ، به لینک های زیر توجه کنید :
http://www.codeproject.com/Tips/458785/P...apsulation
http://stackoverflow.com/questions/98529...ple-in-php
http://javabyab.com/3203/encapsulation-%...8%AA%D8%9F
برای آشنایی بیشتر با OOP در PHP این کتاب بخش اولش فصل 6ام توضیحات خوبی داده ، متنش ساختار راحتی داره برای خوندن :)
(09-04-1394، 11:49 ب.ظ)ABZiko نوشته: [ -> ]یک سوال داشتم ازتون، این یعنی چی :
مفهوم کپسوله سازی تو شئ گرا

بطور خلاصه استفاده از get و set هستش.

نمونه ساده:
<?php

class Test
{
   private $_name;
   
   public function setName($name)
   {
       $this->_name = $name;
   }
   
   public function getName()
   {
       return $this->_name;
   }
}


$test = new Test();
$test->name = "Ali";
echo $test->name; // output: Ali
البته اگه اینطوری کلاس رو بنویسید، دیگه نمیشه به شکل test->name$ ازش استفاده کنید چون فیلد name خصوصی شده و باید با متدهای setName و getName کار کنید:
$test = new Test();
$test->setName('Ali');
echo $test->getName(); // output: Ali

اگه میخواین همزمان، کپسوله سازی و قابلیت استفاده از فیلدها رو داشته باشین، باید از دستیابها و متدهای جادویی get__ و set__ استفاده کنید. مثال:
class Student
{
    private $name;
    private $grade;

    public function __get($attribute) {
        if(property_exists($this, $attribute)) {
            return $this->{$attribute};
        }
    }

    public function __set($attribute, $value) {
        if(property_exists($this, $attribute)) {
            switch($attribute) {
            case 'name':
                $this->name = $value;
                break;
            case 'grade':
                if($value >= 0 && $value <= 20) {
                    $this->grade = $value;
                }
                break;
            }
        }
    }
}

$student = new Student();
$student->name = 'Ali';
$student->grade = 15; // valid
echo $student->name . ' - ' . $student->grade . '<br />' . PHP_EOL; // Output: Ali - 15
$student->grade = 25; // invalid
echo $student->name . ' - ' . $student->grade . '<br />' . PHP_EOL; // Output: Ali - 15

همونطور که میبینید، کپسوله سازی به شما امکان اعتبارسنجی مقادیری که برای فیلدهای کلاس ارسال میشن رو هم میده.

ABZiko

از همه دوستان ممنونم، من می خوام برای کپسوله سازی متغیر هام رو تبدیل به private کنم که یک مشکلی دارم، وقتی می خوام متغیر در تابع ای که Static هست رو فرخوانی کنم، می نویسه در این متغیر در Static قابل خواندن نیست ...
مشکل از چیه ؟
فیلدهای غیر استاتیک، خصوصیات اشیاء رو مشخص میکنن. وقتی هیچ شیئی وجود نداره، میخواین به مشخصات چی دسترسی پیدا کنین؟ توی متدهای استاتیک فقط به فیلدهای استاتیک دسترسی دارین.
البته من فیلد name_$ رو خصوصی تعریف کردم. کد رو هم اجرا کردم مشکلی نداشت.
البته کپسوله سازی فقط به get و set ختم نمیشه بعضی وقتها یکسری کلاس ها هم نقش میانی بین کلاس های دیگه رو دارن و این مفهوم رو دارن به نوع دیگری بیان میکنن
متد static فقط static میفهمه چون وقتی بخواد فراخوانی بشه نوع تخصیص حافظه ایی که داره بدون استفاده از شئ هستش

ABZiko

از همه دوستان ممنونم ...
پس نوع متغیر ها رو Static تعریف کنم، درسته؟ اینطوری مفهوم کپسوله سازی هم تا حدودی رعایت می شه ، بله ؟
صفحات: 1 2 3