n = int(input('請輸入正整數:'))

#直角在左下
print("直角在左下")
for i in range(n):
    for j in range(0, i+1):
        print("*", end='')
    print()

#直角在左上 
print("直角在左上")
for i in range(n):
    for j in range(i, n):
        print("*", end='')
    print()

#直角在右上
print("直角在右上")
for i in range(n):
    for k in range(0,i):
        print("", end=" ")
    for j in range(i, n):
        print("*", end='')
    print('')
    
#直角在右下
print("直角在右下")
for i in range(n):
    for k in range(i+1,n):
        print("", end=" ")
    for j in range(0, i+1):
        print("*", end='')
    print('')

#等腰三角形
print("等腰三角形")
for i in range(n):
    for j in range(i, n):
        print(end=" ")
    for k in range(0, i+1):
        print("*", end=" ")
    print("")
    
#倒等腰三角形
print("倒等腰三角形")
for i in range(n):
    for j in range(0, i):
        print(end=" ")
    for k in range(i, n):
        print("*", end=" ")
    print("")
pyt

文章標籤

mingyilai 發表在 痞客邦 留言(0) 人氣()

最近工作有遇到一些商務部分,出現了精確度問題,運算時使用  BigDecimal  ,不要用  float  或  double 

https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accuracy_problems

文章標籤

mingyilai 發表在 痞客邦 留言(0) 人氣()

1.找到Skype.exe原地copy一份成任意檔名,例:Skype2.exe

2.對Skype2.exe建立捷徑,命名"ABCD" 之類的名稱

3.把這個捷徑按右鍵打開 內容(R),修改 目標(T) 為

"C:\Program Files (x86)\Microsoft\Skype for Desktop\Skype2.exe" --secondary --datapath "C:\Skypem\profile1"

文章標籤

mingyilai 發表在 痞客邦 留言(0) 人氣()

前幾天在公司使用 Source Tree 要clone Katalon 專案時遇到這個訊息,試了很多方法,像是砍掉驗證帳號再新增,換Source Tree 版本,換 Katalon 版本(?

1.png

網路上找了一些方法也無法解決,

後來直接在  C:\Users\使用者\AppData\Local\Atlassian 資料夾刪掉後重開機,再重裝一次就成功了 ...

文章標籤

mingyilai 發表在 痞客邦 留言(0) 人氣()

最近工作中自學Katalon,整理一下看過的網站

Udemy線上影片教學(免費)

Katalon Studio - Step by Step for Beginners

小鷹學堂-中文影片介紹

初識 Katalon Studio 自動化測試工具

 

自動化測試工具katalon studio 初試

 

katalon 安装,录制,执行简单Web脚本

 

Katalon官方教程——如何创建自定义关键字

 

Katalon Studio元素抓取功能Spy Web介绍

 

使用Katalon Studio进行数据驱动测试的方法

 

https://blog.csdn.net/qq_18659137/article/list/2

 

【Katalon学习八】Katalon 工具栏介紹

 

【Katalon学习九】Katalon Tests Explorer 视图介绍

 

【Katalon学习十】Katalon Keywords Browser视图

 

【Katalon学习十一】Katalon Editors 编辑器视图

 

【Katalon学习十二】Katalon Studio Preferences 首选项

 

【Katalon学习十三】Katalon Studio 项目之 API/Web Service Project(5.8以上)

 

【Katalon学习十八】元素定位器设置 (5.7.1以上版本)

 

【Katalon学习十九】Manual View

 

【Katalon学习二十】脚本视图Script View

 

【Katalon学习二十一】二进制语句Binary Statements

 

【Katalon学习二十二】控制语句

 

【Katalon学习二十三】方法调用语句Method Call Statements

 

【Katalon学习二十四】调用测试用例Call Test Case

 

【Katalon学习二十五】定义方法 Method

 

【Katalon学习二十六】变量类型

 

【Katalon学习二十七】数值类型

 

【Katalon学习二十八】调试模式

 

【Katalon学习二十九】测试套件和测试用例的设置/拆卸

 

【Katalon学习三十一】Record Web Utility

 

【Katalon学习三十二】断言语句

 

【Katalon学习三十三】管理检查点

 

【Katalon学习三十四】验证片段

 

【Katalon学习三十五】自定义关键字介绍

 

【Katalon学习三十六】导入/导出关键词

 

【Katalon学习三十九】处理加密文本

 

【Katalon学习四十】处理响应消息

 

【Katalon学习四十一】执行测试用例或测试套件

 

【Katalon学习四十二】设计一个测试套件

 

【Katalon学习四十三】测试套件集合

 

【Katalon学习四十四】Desired Capabilities介绍

 

【Katalon学习五十一】测试套件报告

 

【Katalon学习五十二】测试套件收集报告

 

【Katalon学习五十四】视频录制

 

【Katalon学习Web UI】浏览器操作

 

【Katalon学习Web UI】复选框操作

 

【Katalon学习Web UI】下拉组合框 操作

 

【Katalon学习Web UI】元素操作

 
文章標籤

mingyilai 發表在 痞客邦 留言(0) 人氣()

★☆紅色字體是說明,粉色字體是指令☆★


先安裝VMware Workstation + CentOS-7

Create a New Virtual Machine (建立一個虛擬網站)

選擇要安裝的路徑,之後按 Next> 去下一個步驟

設定虛擬機的名字,接著 Next> 去下一個步驟

Next >

點擊Finish邁入安裝畫面

 

等待進入安裝畫面,可以按Enter進入檢查畫面

進入安裝畫面,左邊欄位往下拉選擇「中文」,右邊就會出現「繁體中文(台灣)」可以選擇,然後「繼續」

先進入「安裝目的地(D)」完成設定

按左上角「完成」就可以了

開始安裝

設置ROOT密碼

設定完成就按左上角「完成」兩次

等待電腦安裝

安裝後「重新開機」


進入Linux的登錄畫面,輸入剛剛設定的使用者名稱和密碼

進入 network-scripts 更改網路配置(我的配置是ens33,每個人不一定都是同樣的名稱

cd /etc/sysconfig/network-scripts

ls -a

vi ifcfg-ens33

現在進入編輯模,按 i 鍵進入,然後按往下的方向鍵,將 ONBOOT=no,改成 ONBOOT=yes 

然後按 Esc,再輸入 「:wq 」,保存之後離開,就會看到被改寫的紀錄

重新啟動網路

service network restart

查看ip位址(馬賽克的地方會有一串ip,那就是虛擬機的ip位址)

ip addr show

★知道了ip位址可以建議使用「PuTTy」來連線虛擬機,操作輸入指令會比較方便★

更新服務器(安裝蠻多東西的,需要一些時間),結束會有Complete!的通知

yum -y update

安裝EPEL儲存庫 (如果有詢問安裝問題,按 y 就可以了

yum -y install epel-release

yum --enablerepo=extras

驗證EPEL Repo

yum repolist


安裝Apache Web服務器

yum -y install httpd

啟動Apache Web服務器

systemctl start httpd.service

創建httpd的系統啟動鏈接,在系統啟動時自動啟動httpd

systemctl enable httpd.service

CentOS 7.X使用防火牆CMD,因此您必須對其進行自定義,以允許外部訪問端口80(http)和443(https)。

systemctl start firewalld
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

確保Apache服務器正在運行:http://你的網址/ 

網址可以用 ip addr show 來看

安裝成功的話,進入網址會出現Apache的網頁,有大大的 「Testng 123..」 字樣在畫面裡


安裝PHP

安裝 wget 工具

yum -y install wget

安裝REMI存儲庫

wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

rpm -Uvh remi-release-7*.rpm

驗證EPEL Repo

yum repolist

PHP 7.0安裝

確保 remi-php70.repo 的位置
ls /etc/yum.repos.d

啟用php7.0的REMI存儲庫(更改enabled = 0 啟用= 1),

如果要裝php7.2就去remi-php72.repo更改設定

vi /etc/yum.repos.d/remi-php70.repo

安裝PHP

yum -y install php

為PHP7安裝MySQL支持

yum -y install php-mysql

您可以安裝CMS系統(如WordPress,Joomla和Drupal)所需的常見PHP模塊

yum -y install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel
 

重新啟動Apache:

systemctl restart httpd.service

我們來測試一下:創建php信息文件

vi /var/www/html/info.php

添加以下行到info.php,儲存然後離開
<?php
  phpinfo();
  phpinfo(INFO_MODULES);
?>

確保PHP工作,php模塊在那裡 http://你的ip網址/info.php
正確的話可以看到安裝的php版本


安裝MySQL

检测系统是否自带安装 mysql
rpm -qa | grep mysql

安裝 MySQL Repository

rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

安裝 MySQL Server, MySQL client 已經包括在 server 套件內

yum -y install mysql-community-server

開機自動啟動 MySQL
systemctl enable mysqld

啟動 MySQL
systemctl start mysqld

重新啟動 MySQL
systemctl restart mysqld.service

現在可以嘗試連線 MySQL

mysql -u root -p (沒有設定密碼,直接按enter進入,要離開輸入 quit 再 enter 就可以了

验证Mysql安装

mysqladmin --version


安裝 phpmyadmin

yum -y install phpmyadmin

在CentOS 7上配置phpMyAdmin
默認情况下,CentOS 7上的phpMyAdmin只允许從回環地址(127.0.0.1)訪問。為了能遠程連線,你需要變更它的設定。
用文本編輯器打開phpMyAdmin的配置文件(路徑:/etc/httpd/conf.d/phpMyAdmin.conf),找出並注釋掉帶有"Require ip XXXX"字樣的代碼。會有四行這樣的代碼,用"Require all granted"取代。重新設定過的文件如下所示(紅框內是有更改過的設定),更改完設定就儲存並離開。

vi /etc/httpd/conf.d/phpMyAdmin.conf

重啟 Apache
systemctl restart httpd

試著打開安裝好的phpmyadmin網頁(http://你的ip/phpmyadmin)

這時應該還不能登錄,因為還沒有設定root的密碼

重设Mysql密码

mysql -u root (先進入mysql

mysql> use mysql;

mysql> update user set authentication_string=password('新的密碼') where user='root'; (我是使用4個零當密碼)

mysql> flush privileges;

退出mysql
mysql> quit

重启mysql
service mysql restart

試試使用剛剛設定的新密码登录MySQL
mysql -u root -p

如果跟我遇到相同無法登入的問題,可以依照下方的指令執行應可解決

查看運行的mysql
ps -A|grep mysql

kill運行的mysql
pkill mysql

查看運行的mysql
ps -A|grep mysql

kill運行的mysql
pkill mysql

重啟mysql
service mysql restart

更改mysql密碼
mysqladmin -u root password "新密碼"; (新密碼使用1234)

mysql -u root -p (這要用新密碼登錄,紅框是輸入原來的密碼4個零出現的錯誤)

再去phpadmin使用新密碼登錄,就可以操作phpmyadmin

mingyilai 發表在 痞客邦 留言(0) 人氣()

很久沒有時間發文了,寫個最近處理手機門號的事來分享一下:

我的門號是中華,從五專的時候就開始使用了,算是中華vip級的客戶,但是中華對於老客戶的方案實在是很爛,但是收訊又是最好的,只好當了很多年的冤大頭。

最近由於有最強小三要養,就要開源節流了,每個月吃到飽的1399真是很傷荷包,google了一下其他業者4g吃到飽每個月只要699,但是中華對於老客戶續約似乎沒有這樣的優惠。

所以請示google大神之後,有了中華雙np的流程出現,稍微上網做了一下功課,其實不難,只是要花時間去直營店處理門號攜出/入的事。

以下是跑流程及所要花的錢(都是以本人作為例子):

1.先去中華辦攜出

  我的合約是5/10到期(月租費1399,很凱吧...),4/12下午去辦攜出,所以除了轉移費要再加上違約金112元,共547元給中華。

2.再去其他電信辦攜入(使用預付卡

  我是在文心森林公園旁的中華電信辦完攜出就去對面的台灣大直營店辦攜入,攜入是使用預付卡,如果有想要上網的話,可以下載台灣大的app儲值(還有其他儲值方法請上台灣大的官網),其實只要開通就可以辦攜出,不一定要儲值;4/13的早上6點之後就開通了,也就是看到手機的sim卡有收到台灣大的信號,這個步驟免費。

3.去台灣大辦攜出

  我4/13有事回埔里,所以就直接去埔里的台灣大直營店辦攜出,攜出移轉費112

4.去np名店辦攜入(台中x林

  跟店員說要辦中華攜入,699吃到飽,不拿手機,應該要退5200給我,但是要預繳3600,所以共退1600給我。

  4/14早上5點之後就開通了

以上是我2天np的流程,賺了1600-547-112=941的現金和每個月費率699的4g上網吃到飽(30個月)

心得:

1.為了應付這一次沒有網路吃到飽的情況,我去申請了台灣之星的4g免費試用一個月,但是不管我怎麼換地方,始終只有3g出現,而且有時候3g的訊號還不是很穩....

2.移轉費從之前的240元改成112元了,跟我做的功課不一樣。

3.np名店每家店的方案都不同,請自行上網做功課。

4.轉出中華之後,就是沒有了上網功能,可以考慮使用台灣大的1日(100塊)或是2日(200)上網吃到飽(可以去台灣大的app看費率)來撐過沒有網路的時間。

5.以上流程請自備雙證件(身份證+有照片的證件),不用影本,本人親辦比較不麻煩的樣子。

6.我都是去直營店辦的,不要問我特約店能不能辦,我不知道,抱歉。

7.因為第1點台灣之星很爛,所以我有花100塊買了台灣大的1日4g上網吃到飽,真的很有佛心的讓我用1天,即使我下午已經辦好攜出台灣大的流程,但是到晚上要睡覺前還是可以使用台灣大的4g網路,真心不騙。

8.以前還傻傻的一直以為當中華的老客戶可以有比較多的優惠,對不起我錯了,跑一下雙np才是真正優惠的王道阿!雖然要花一些時間,但是是值得的。

mingyilai 發表在 痞客邦 留言(3) 人氣()

表單(form)可以提供輸入介面,讓使用者輸入資料,然後將資料傳回Web伺服器,以做進一步的處理,常見的應用有Web搜尋、網路票選、線上問卷、會員登錄、線上訂購等。

表單的建立包含下列兩個部分:

  1. 使用 <form> 和 <input> 元素撰寫表單的介面,例如單行文字方塊、選擇鈕、核取方塊等。
  2. 撰寫表單的處理程式,也就是表單的後端處理,例如將表單資料傳送到電子郵件地址、寫入檔案、寫入資料庫或進行查詢等。

<form> 元素

accept="...":指定MIME類型(超過一個的話,中間以逗號隔開),做為Web伺服器處理表單資料的根據,例如 accept="image/gif, image/jpeg"。

accept-charset="...":指定表單資料的字元編碼方式,Web伺服器必須根據指定的字元編碼方式處理表單資料。字元編碼方式定義於RFC2045(超過一個的話,中間以逗號隔開),例如accept-charset="ISO-8859-1"。

action="uri":指定表單處理程式的相對或絕對位址,若要將表單資料傳送到電子郵件地址,可以指定電子郵件地址的uri;若沒有指定action屬性的值,表示使用預設的表單處理程式,例如:

<form method="post" action="handler.php">

<form method="post" action="mailto:ming@hotmail.com">

enctype="...":指定將表單資料傳回Web伺服器所採用的編碼方式,預設值為 "application/x-www-form-urlencoded" ,若允許上傳檔案給Web伺服器,則enctype屬性的值要指定為 "multipart/form-data" ;若要將表單資料傳送到電子郵件地址,則enctype屬性的值要指定為 "text/plain"。

method="{get,post}":指定表單資料傳送給表單處理程式的方式,當method="get"時,表單資料會被存取在HTTP GET變數 ($_GET),表單處理程式可以透過這個變數取得表單資料;當method="post"時,表單資料會被存放在HTTP POST變數($_POST),表單處理程式可以透過這個變數取得表單資料;若沒有指定method屬性的值,表示為預設值get。

name="...":指定表單的名稱(限英文且唯一),此名稱不會顯示出來,但可以做為後端處理之用,供Script或表單處理程式使用。

target="...":指定用來顯示表單處理程式之結果的目標框架。

autocomplete="{on,off,default}":指定是否啟用自動完成功能,on表示啟用,off表示關閉,default表示繼承所屬之<form>元素的autocomplete屬性,而<form>元素的autocomplete屬性預設為on,例如下面的敘述是讓用來輸入使用者名稱的單行文字方塊具有自動完成功能:

<p>Username:<input type="text" autocomplete="on"></p>

novalidate:指定在提交表單時不要進行驗證。

HTML元素的全域屬性和事件屬性,其中比較重要的有onsubmit="..."用來指定當使用者傳送表單時所要執行的Script,以及onreset="..."用來指定當使用者清除表單時所要執行的Script。

<input>元素

用來在表單中插入輸入欄位或按鈕

align="{left,center,right}" (Deprecated):指定圖片提交按鈕的對齊方式(當type="image"時)。

accept="...":指定提交档案时的MIME类型(以逗號隔開),例如<input type="file" accept="image/gif, image/jpeg">。

checked:將選擇鈕或核取方塊預設為已選取的狀態。

disabled:取消表單欄位,使表單資料無法被接受或提交。

maxlength="n":指定單行文字方塊、密碼欄位、搜尋欄位等表單欄位的最多字元數。

name="...":指定表單欄位的名稱(限英文且唯一),此名稱不會顯示出來,但可以做為後端處理之用。

notab:不允許使用者以按 [Tab] 鍵的方式移至表單欄位。

readonly:不允許使用者變更表單欄位的資料。

size="n":指定單行文字方塊、密碼欄位、搜尋欄位等表單欄位的寬度(n為字元數),size屬性和maxlength屬性的差別在於它並不是指定使用者可以輸入的字元數,而是指定使用者在畫面上可以看到的字元數。

src="url":指定圖片提交按鈕的位址(當type="image"時)。

type="state":指定表單欄位的輸入類型。

usemap:指定瀏覽器端影像地圖所在的檔案位址及名稱。

value="...":指定表單欄位的初始值。

form="formid":指定表單欄位隸屬於ID為formid的表單。

min="n"、max="n"、step="n":指定數字輸入類型或日期輸入類型的最小值、最大值和間隔值。

required:指定使用者必須在表單欄位中輸入資料,例如 <input type="search" required> 是指定使用者必須在搜尋欄位中輸入資料,否則瀏覽器會出現提示文字要求輸入。

multiple:允許使用者提交多個檔案,例如 <input type="file" multiple> ,或允許使用者輸入以逗號分隔的多個電子郵件地址,例如 <input type="email" multiple>。

pattern="...":針對表單欄位指定進一步的輸入格式,例如 <input type="tel" pattern="[0-9]{4}(\-[0-9]{6})"> 是指輸入值須符合 xxxx-xxxxxx 的格式,而 x 為 0 到 9 的數字。

autocomplete="{on,off,default}":指定是否啟用自動完成功能,on表示啟用,off表示關閉,default表示繼承所屬之<form>元素的autocomplete屬性,而<form>元素的autocomplete屬性預設為on。

autofocus:指定在載入網頁的當下,令焦點自動移至表單欄位。

placeholder="...":指定在表單欄位內顯示提示文字,待使用者將焦點移至表單欄位,提示文字會自動消失。

list:list屬性可以和 HTML5 新增的 <datalist> 元素搭配,讓使用者從預先輸入的清單中選擇資料或自行輸入其它資料。

HTML 元素的全域屬性和事件屬性,其中比較重要的有

onfocus="..." 用來指定當使用者將焦點移至表單欄位時所要執行的 Script,

onblur="..." 用來指定當使用者將焦點從表單欄位移開時所要執行的Script,

onchange="..." 用來指定當使用者修改表單欄位時所要執行的 Script,

onselect="..." 用來指定當使用者在表單欄位選取文字時所要執行的 Script。

type屬性 輸入類型 type屬性 輸入類型
type="text" 單行文字方塊 type="reset" 重新輸入按鈕
type="password" 密碼欄位 type="file" 上傳檔案
type="radio" 選擇鈕 type="image" 圖片提交按鈕
type="checkbox" 核取方塊 type="hidden" 隱藏欄位
type="submit" 提交按鈕 type="button" 一般按鈕
type="email" 電子郵件地址 type="date" 日期
type="url" 網址 type="time" 時間
type="search" 搜尋欄位 type="datetime" UTC世界標準時間
type="number" 數字 type="month" 月份
type="range" 指定範圍內的數字 type="week" 一年的第幾週
type="color" 色彩 type="datetime-local" 本地日期時間

 

 

 

 

 

 

 

 

 

 

type 屬性的預設值為 "text",當瀏覽器不支援HTML5新增的type屬性值時,就會顯示預設的單行文字方塊。HTML5除了提供更多的输入類型,更重要的是它會進行資料驗證,假設我們將 type 屬性指定為 "email" ,那麼瀏覽器會自動驗證使用者輸入的資料是谷符合正確的電子郵件地址格式,若不符合,就提示使用者重新輸入。在瀏覽器內建資料驗證的功能後,我們就不必再處處寫 JavaScript 程式碼驗證使用者輸入的資料,不僅省時省力,網頁的操作也會更順暢。

<textarea>元素

用來在表單中插入多行文字方塊,其屬性如下:

cols="n":指定多行文字方塊的寬度(n為字元數)。

disabled:取消多行文字方塊,使之無法存取。

name="...":指定多行文字方塊的名稱(限英文且唯一),此名稱不會顯示出來,但可以做為後端處理之用。

readonly:不允許使用者變更多行文字方塊的資料。

rows="n":指定多行文字方塊的高度(n為行數)。

form="formid":指定多行文字方塊隸屬於ID為formid的表單。

required:指定使用者必須在多行文字方塊中輸入資料。

autofocus:指定在載入網頁的當下,令焦點自動移至多行文字方塊。

placeholder="...":指定在多行文字方塊內顯示提示文字,待使用者將焦點移至多行文字方塊,該提示文字會自動消失。

<select>元素

用來搭配 <option> 元素在表單中插入下拉式功能表,其屬性如下,

multiple:指定使用者可以在下拉式功能表中選取多個項目。

name="...":指定下拉式功能表的名稱(限英文且唯一),此名稱不會顯示出來,但可以做為後端處理之用。

readonly:不允許使用者變更下拉式功能表的項目:

size="n":指定下拉式功能表的高度。

form="formid":指定下拉式功能表隸屬於ID為formid的表單。

required:指定使用者必須在下拉式功能表中選擇項目。

autofocus:指定在載入網頁的當下,令焦點自動移至多行文字方塊。

<option>元素

放在 <select> 元素裡面,用來指定下拉式功能表的項目,其屬性如下,

disabled:取消下拉式功能表的項目,使之無法存取。

selected:指定預先選取的項目。

value="...":指定下拉式功能表項目的值(中英文皆可),在使用者點取 [提交] 按鈕後,被選取之下拉式功能表項目的值會傳回Web伺服器,若沒有指定 value 屬性,那麼下拉式功能表項目的資料會傳回 Web 伺服器。

 

mingyilai 發表在 痞客邦 留言(0) 人氣()

「命名空間」(namespace)是一種命名方式,用來組織各個類別,函式、常數等,它和這些元素的關係就像檔案系統中目錄與檔案的關係一樣,舉例來說,假設MyClass隸屬於 \A\B\C 命名空間,那麼若要建立一個名稱為Obj、隸屬於MyClass的物件,可以寫成如下:

$Obj = new \A\B\C\MyClass;

其中第一個反斜線 \ 表示「全域空間」(global space),就像檔案系統中的根目錄一樣,在PHP開始支援命名空間之前,或當PHP程式沒有定義任何命名空間時,所有類別、函式、常數等都是放在全域空間,至於其它反斜線 \ 則是用來連接命名空間內所包含的子命名空間、類別、函式、常數等,例如此處的 A、B、C均為子命名空間。

PHP支援命名空間目的:

  • 解決名稱衝突的問題:當您自己撰寫的PHP程式和PHP內建或其它人撰寫的類別、函式、常數發生名稱衝突時,可以利用命名空間來解決。
  • 提供設定別名的功能:當PHP程式裡面的類別、函式或常數的名稱太長或不易理解時,可以利用命名空間來設定簡短易讀的別名(alias)。

事實上,如果程式裡沒有遇到上面的問題,可以不用理會命名空間的概念,因為程式依然能夠正常執行,以下面兩段程式碼為例,功能是相同的,只是第二段程式碼有加入命名空間的概念。

<?php
    $Obj = new Class1;
?>

<?php
    $Obj = new \Class1;
?>


原則上,命名空間的命名方式及分類是依照類別、函式、常數的性質而定,同時PHP程式均放在全域空間 \ 內。若要在PHP程式中自訂命名空間,可以使用namespace關鍵字,下面是一個例子,它會在網頁上顯示變數Y的值,要注意的是namespace敘述必須放在檔案的最前端。

<?php
  namespace my\name;             //在全域範圍內定義my\name命名空間
  class MyClass {}                       //在\my\name命名空間內定義MyClass類別
  function Myfunction() {}          //在\my\name命名空間內定義Myfunction函式
  const MYCONST = 1;              //在\my\name命名空間內定義MYCONST常數
  $X = new \my\name\MyClass;    //建立MyClass類別的物件,寫成$X = new MyClass;亦可
  $Y = \my\name\MYCONST;        //定義Y為常數MYCONST,寫成$Y = MYCONST;亦可
  echo $Y;                                  //顯示Y的値
?>

如果使用 use 關鍵字將 my\name 命名空間的別名設定為 A 並插在 namespace my\name; 這行下面 

use my\name as A;

這樣 $X = new \my\name\MyClass;  和 $Y = \my\name\MYCONST; 

可以改成

$X = new A\MyClass;

$Y = A\MYCONST;

文章標籤

mingyilai 發表在 痞客邦 留言(0) 人氣()

抽象方法(abstract method),是一個特殊的方法,它必須放在「抽象類別」(abstract class)內,只有定義的部分,沒有實作的部分,實作的部份必須由子類別提供,至於抽象類別則是一種特殊的類別,只有類別的定義和部分實作,必須藉由子類別來實作或擴充其功能,也就是說抽象類別只能被繼承,不能被實作(instantiation)

 <?php
      abstract class Pay //定義抽象類別
      {
        public $EmpName;
        abstract public function Payment($Hours, $PayRate);  //定義抽象方法
      }
      class BonusPay extends Pay
      {
        public function Payment($Hours, $PayRate)  //覆蓋抽象方法(參數個數必須相同)
        {
          return $Hours * $PayRate + 5000;
        }
      }
        $Obj = new BonusPay();
      echo '加上獎金之後的薪資為'.$Obj->Payment(100, 80).'<br>';
    ?>

輸出結果為:

加上獎金之後的薪資為13000

文章標籤

mingyilai 發表在 痞客邦 留言(0) 人氣()