最近看到一種程式寫法,大概是這樣
<?php
class Test
{
public function add($a, $b)
{
return $this->add_basic($a, $b);
}
public function add_basic($a, $b)
{
$arr = [];
// 做一些事情
return $arr;
}
}
print_r((new Test())->add(1,2));
小弟百思不得其解,為何不直接 call add_basic 就好?
硬是要在外面包一層有何用意嗎......?
小弟百思不得其解,為何不直接 call add_basic 就好?
硬是要在外面包一層有何用意嗎......?
這是一個類似於物件導向的寫法,但是你的例子編寫方法架構並 不是完整 的物件導向寫法。所以你會看到一頭霧水。
再說這個不是一個好的學習例子。
直接去學習php物件導向程式設計比較好一點。
物件導向程式設計(英語:Object-oriented programming,縮寫:OOP)
暫時只能夠這樣說,OOP物件導向程式設計,是一種非常重要的 武功心法。
我再強調一次是 心法
我試一下把一些例子說明OOP的好處
因為這個是武功心法,無法太簡單地解釋
只能夠這樣說,一種武功心法,不管在任何一種電腦語言(c, c++, c#, perl, php, .net, java, javascript)上,方法都是大同小異。
重點說明一次,物件導向是電腦程式語言的編寫方法和架構。
最後一句,在十年前,當我完全了解OOP之後, 我發現自己浪費了30年時間學習編程。 所以這個技術是非常之重要。
補充
無論你有冇需要,這是一個標準,就是說你以後所寫的程式只有一種規格。
以下說明只是基礎,這些基礎任何一項都不應該少,而且不管你是不是用php也是這個規格。
進階的不在這裡說明,因為大部分人基礎都未學習清楚,就去學進階的,結果永遠學不會。
基礎OOP架構
每一個物件導向(Class),都應該具備以下基礎規則:-
進階的(暫時不要理會)
4. 呼叫另一個物件(Class)
5. 繼承另一個物件(Class)
每一個物件導向(Class)操作簡介:-
感謝 Samと可樂快跑 的補充
補充
以下是一個完整的php OOP教學例子網站
https://code.tutsplus.com/tutorials/object-oriented-php-for-beginners--net-12762
補充
個人感覺學習OOP,用c++比較容易學會和理解
但php感覺上,比較難明白一點
可能是,大家使用的編寫方法有點不同,例如一些符號
c++ { . }
php { -> }
回家之後我再試一試補充一些資料
補充好了 你看看這些東西對你有沒有幫助
你的是中港用詞,我幫你改台灣用語吧。
1.啟動 (Start),停止(End)。(php 稱之為 Constructors,Destructors)
這和物件的生命週期有關係。
其實就是指:建構(construct)和解構(destruct)
當物件被生成時,建構式會被驅動執行。
而當物件被消滅時,解構式會被驅動執行。(釋放資源、記憶體等等)
2.公共變量(Public valuable),私有變量(Private valuable)
其實是開放成員(public)和私有成員(private)
但其中也還有像是保護級成員(protected)之類的。不同語言可能還分的更複雜些。
3.Class 中的副程式 (Public Function),(Private Function)
事實上在class中應稱function為method(方法)
function一般稱之為函式。
但在class中則改稱之為方法(method)
副程式早其我是在basic中看過如此稱呼,但在後來絕大多數的語言都稱之為「函式」。
因為函式可以代表「功能」不見得是「副」(附屬)的範圍。
另外:
「(Public Function),讓主程式執行使用」
這說法也沒說錯,但不完整。
public就是開放給外部使用及執行(如果理解介面的用途的話)
private則是不開放(也就是私有),僅能在該類別中被使用。
謝謝,我都已經分不清楚中港台用語了。
一邊寫一邊想寫英文,哈哈
理由很多吧,有可能想讓呼叫端call add, 或是add_basic 有別的地方共用到,
又或是某種設計模式,這種寫法再基本不過,不管為何目的就是為了彈性,
之後有變化不用修改add_basic,只需要調整add,不會讓其他有用到add_basic的地方,
跟著被改變
用比較簡單點的說法好了。
1.繼承式的寫法應用:
add方法是存在主類別上。但add_basic則是繼承在子類別時。
這樣可方便切換不同類別的應用做法。並結合繼承性的處理方式。
2.統一架構的應用寫法:
在架構中,我可能會需要加入某些方法。但我想要做到一個統一的地方做加入。
也就是我些宣告一個add的方式做法。控制就單純的對照到add的方式。
未來如果我要加入其它的模組或是對應的東西。我只要改這個add的方法就可以了。
其實這樣看起來很像是多餘式的寫法。都是所謂架構式的寫法。
你看的教學只是告訴你可以這樣用。但沒跟你說這樣用的用意在哪。
依照你開發的東西而言。如果沒有特別的必要性。確實也沒那個必要分開那麼多組。反而麻煩。
我就曾經碰過架構不明確,跳來跳去的寫法。一僤作要輪到第三輪才有作用。說繼承也無繼承。都是原物件宣告。
不過比較常看到的是私密方法的應用語法。如
class db {
function set($name,$var){
$this->_set($name,$var,TRUE);
}
function arrset($arr){
$this->_set(null,$var,FALSE);
}
function _set($name,$var,$isarr=TRUE){
...............
}
}
像如上的應用處理。就是將語法統一化。但程式碼額外應用的做法。